我正在尝试定义我在Entity Framework 6中使用的一些模型。我想使用F#记录。如果我将[<CLIMutable>]
置于记录定义之上,并使用ICollection<'a>
代表集合。 EF工作正常。
我可以存储和检索记录。但是,对于EF进行延迟加载,我需要创建包含虚拟集合的记录字段。我可以通过使属性成员抽象并提供默认值来使其成为虚拟成员。记录不是类。是否可以将记录字段设为虚拟?
如果我尝试用抽象成员扩充记录,我会收到此错误this declaration element is not permitted in an augmentation
答案 0 :(得分:6)
据我所知,你无法在记录中定义虚拟成员 - 这是有道理的,因为你也不能从记录中继承,所以为什么你需要虚拟成员。
但我可以理解为什么Entity Framework需要这样做。也许有类似CliVirtual
属性的东西是有意义的,类似于CliMutable
(特别是如果这经常发生)。请随意在F# uservoice page建议:
所以,我猜你最好的选择是使用具有虚拟自动实现属性的普通类(看起来非常丑陋):
type A() =
abstract member Id: int with get, set
default val Id = 123 with get, set
或者看看F#的其他一些SQL类型提供程序是否允许你更好地做同样的事情!