如何为Entity Framework延迟加载创建虚拟记录字段

时间:2014-11-06 09:24:55

标签: entity-framework f#

我正在尝试定义我在Entity Framework 6中使用的一些模型。我想使用F#记录。如果我将[<CLIMutable>]置于记录定义之上,并使用ICollection<'a>代表集合。 EF工作正常。

我可以存储和检索记录。但是,对于EF进行延迟加载,我需要创建包含虚拟集合的记录字段。我可以通过使属性成员抽象并提供默认值来使其成为虚拟成员。记录不是类。是否可以将记录字段设为虚拟?

如果我尝试用抽象成员扩充记录,我会收到此错误this declaration element is not permitted in an augmentation

1 个答案:

答案 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类型提供程序是否允许你更好地做同样的事情!