1
我試圖做EF一個簡單的多到一的關係,並確定它像:F# - > EF生成錯誤的SQL
type Car() =
[<DefaultValue>] val mutable private id : int
member x.ID with get() = x.id and set(v) = x.id <- v
[<DefaultValue>] val mutable private carName : string
member x.CarName with get() = x.carName and set(v) = x.carName <- v
[<DefaultValue>] val mutable private dealer : Dealer
member x.Dealer with get() = x.dealer and set(v) = x.dealer <- v
and Dealer() =
[<DefaultValue>] val mutable private id : int
member x.ID with get() = x.id and set(v) = x.id <- v
[<DefaultValue>] val mutable private name : string
member x.Name with get() = x.name and set(v) = x.name <- v
[<DefaultValue>] val mutable private cars : seq<Car>
member x.Cars with get() = x.cars and set(v) = x.cars <- v
type MyContext() =
inherit DbContext("MyContext")
[<DefaultValue(true)>] val mutable private cars : DbSet<Car>
member x.Cars with get() = x.cars and set(v) = x.cars <- v
[<DefaultValue(true)>] val mutable private dealers : DbSet<Dealer>
member x.Dealers with get() = x.dealers and set(v) = x.dealers <- v
,把它在控制檯啓動方式如下:
let ctx = new MyContext()
Query.query <@ seq { for x in ctx.Cars do if x.CarName = "Volvo" then yield x.Dealer.Name } @>
上面會生成以下SQL查詢:
SELECT
[Extent2].[Name] AS [Name]
FROM [dbo].[Cars] AS [Extent1]
LEFT OUTER JOIN [dbo].[Dealers] AS [Extent2] ON [Extent1].[Dealer_ID] = [Extent2].[ID]
WHERE N'Volvo' = [Extent1].[CarName]
現在是我的問題,爲什麼它需要在規定的經銷商汽車類型並將其翻譯爲Dealer_ID
而不是DealerID?
你的車表有什麼專欄? DealerID或Dealer_ID?你是如何製作桌子的? – 2011-03-17 11:01:42
@Ladislav Mrnka - 在我的Car表中,指代'Dealer'的列被命名爲'DealerID' - 我自己創建了表(不生成) – ebb 2011-03-17 11:04:40
這似乎不是F#特定的問題。 (F#語句僅轉換爲C#樣式表達式樹,而表達式樹包含屬性的MemberInfo,因此它不能包含錯誤的名稱)。 – 2011-03-17 12:10:25