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

6
我正在尝试定义一些在Entity Framework 6中使用的模型。我想使用F#记录。如果我在记录定义之前放置[<CLIMutable>],并对集合使用ICollection<'a>,EF就可以正常工作。
我可以存储和检索记录。但是为了使EF进行延迟加载,我需要使包含集合的记录字段虚拟化。我可以通过将其设置为抽象并提供默认值来使属性成员虚拟化。记录不是类。是否可能使记录字段虚拟?
如果我尝试增加一个抽象成员,我会得到这个错误:this declaration element is not permitted in an augmentation
1个回答

6
据我所知,您无法在记录中定义虚成员 - 这是有道理的,因为您也无法从记录继承,那么为什么需要虚成员呢。
但我可以理解为什么Entity Framework需要这样做。也许有类似于CliVirtual属性的东西会很有意义,类似于CliMutable(特别是如果这种情况经常发生)。请随时在F# uservoice页面上提出建议!
因此,我想您最好使用具有虚自动实现属性的普通类(看起来明显更丑陋):
type A() =
  abstract member Id: int with get, set
  default val Id = 123 with get, set

或者看看其他针对F#的SQL类型提供程序是否可以更好地完成相同的事情!


1
谢谢。已经建议了。http://fslang.uservoice.com/forums/245727-f-language/suggestions/6672675-an-clivirtual-attribute - Remko
它已经被移动到 https://github.com/fsharp/fslang-suggestions/issues/360 并被拒绝了。至少现在你可以从GitHub引用它。 - Cameron Taggart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接