简体   繁体   English

F#-> EF生成错误的SQL

[英]F# -> EF generating wrong sql

I'm trying to do a simple many-to-one relationship in EF and have defined it like: 我正在尝试在EF中建立简单的多对一关系,并将其定义为:

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

and calling it the following way in the console start: 并在控制台启动时以以下方式调用它:

let ctx = new MyContext()
Query.query <@ seq { for x in ctx.Cars do if x.CarName = "Volvo" then yield x.Dealer.Name } @>

the above will generate the following SQL Query: 上面将生成以下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]

Now is my question, why do it take the Dealer defined in the Car type and translate it to Dealer_ID instead of DealerID? 现在是我的问题,为什么要采用汽车类型中定义的Dealer并将其转换为Dealer_ID而不是DealerID?

尝试使用StoreName DataAnnotation属性Fluent映射HasColumnName方法为此属性指定显式映射。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM