我需要F#才能使用Entity Framework。我试图从这里改编示例:https://blogs.msdn.microsoft.com/visualstudio/2011/04/04/f-code-first-development-with-entity-framework-4-1/ 问题是记录声明在那里非常可怕,这对我来说是不可接受的。
type public Car() =
let mutable m_ID : int = 0
let mutable m_name : string = ""
[<Key>]
member public this.ID with get() = m_ID
and set v = m_ID <- v
member public this.Name with get() = m_name
and set v = m_name <- v
我以这种方式尝试过CLIMutable:
module Program
[<CLIMutable>]
type Car = {
Name:string
}
let c = new Car(Name = "Honda")
导致错误:“没有可用于'Car'类型的指示符”。 据我所知,这个答案可能是一个解释: https://stackoverflow.com/a/28845368/585819
我也尝试过这样的事情:
[<CLIMutable>]
type Car =
{
ID:int
} member this.Name = ""
错误是一样的。我感到非常失望。有人可以帮忙吗?
答案 0 :(得分:5)
CLIMutable
属性对F#use-sites没有任何影响。添加的默认构造函数不能从F#用户代码访问,因此是可变属性。如果您想使用EFs更改跟踪(在F#中),记录不是一个好的选择(因为除非您声明所有字段mutable
,否则无法更改它)。
如果可能,请考虑使SQL Provider。另一方面,例如Dapper支持序列化/反序列化POCO,从而支持F#记录。
由于记录在F#透视图中看起来是不可变的,因此适用常规构造:
let c = { Name = "Honda" }
或(如果您还有例如type Person = { Name : string }
,则消除歧义)
let c = { Car.Name = "Honda" }
let c : Car = { Name = "Honda" }
let c = { Name = "Honda" } : Car
答案 1 :(得分:0)
这似乎对我有用。这不是记录而是课程。它也可能不能命名为POCO。
commit