【发布时间】:2017-08-21 00:14:39
【问题描述】:
我正在审查一些在 EF 4 天内编写的代码,因为它在性能基准测试中脱颖而出。
代码的目的是使用实体框架实现ICollection<MyBaseClass>(我们现在使用的是 EF 6.1)。
代码存在是因为特定子类中存在的引用在检索时没有具体化
public Parent
{
public virtual ICollection<MyBaseClass>() Base { get; set; }
}
来自数据库,当实际存储的类型是 MyBaseClass 的子类时。
示例子类:
public SubA : MyBaseClass
{
public virtual ICollection<Options> Ref1 { get; set; }
}
目前,代码执行如下操作:
var parent = ctx.Parents.Include(p => p.Base).Where(...).Single();
LoadSubclasses(parent.Base);
...
private void LoadSubclasses(IEnumerable<MyBaseClass> myBase)
{
foreach (var my in myBase)
{
if (my is SubA)
{
this.Entry(my).Reference("Ref1").Load();
this.Entry((SubA)my).Ref1).Collection("Options").Load();
}
else... // Similar for other subclasses
}
}
请注意,ICollection<MyBaseClass>() Base 包含多个具体子类的混合。 ICollection中一般有几百个对象。
有没有更有效的方法来实现Base?
【问题讨论】:
-
你看过一些关于inheritance的EF文章吗?
标签: entity-framework entity-framework-6