C# EF核心,包括派生类型属性
我对特定的C# EF核心,包括派生类型属性,c#,entity-framework,entity-framework-core,ef-database-first,C#,Entity Framework,Entity Framework Core,Ef Database First,我对特定的include语句有一个小问题。 我的数据结构如下: [Table("item")] public class Item { public int Id { get; set; } public string ItemCode { get; set; } ... } public abstract class DerivedItemAbstractBase : Item { [ForeignKey("ItemId")] pu
include
语句有一个小问题。
我的数据结构如下:
[Table("item")]
public class Item
{
public int Id { get; set; }
public string ItemCode { get; set; }
...
}
public abstract class DerivedItemAbstractBase : Item
{
[ForeignKey("ItemId")]
public List<Assignment> Assignments { get; set; }
...
}
[Table("item")]
public class DerivedItemA : DerivedItemAbstractBase
{
...
}
[Table("item")]
public class DerivedItemB : DerivedItemAbstractBase
{
...
}
public class ItemContext : DbContext
{
public DbSet<Item> Items { get; set; }
...
}
这段代码编译得很好,是我在stackoverflow上发现的。
但是,执行此操作会导致出现异常,短消息Invalid include
。
我不知道如何解决这个问题。
该项目是数据库优先的方法,因此我无法控制数据库。
所有项目都存储在同一个表中item
。
我无法创建多个dbset
,因为表中没有鉴别器列,而我
无法在代码中配置自定义鉴别器,因为它需要基于多个属性而不是单个属性进行鉴别
还有别的方法吗?
目前,我正在通过迭代所有ItemContext.Items
来解决这个问题,然后对每个Items执行.Select()
,并创建一个新的DerivedItemA
。之后,我通过从赋值
表迭代手动设置每个赋值
。
但是,这种方法花费的时间太长,如果我能在初始查询中包含它,速度会快得多
public List<DerivedItemA> GetDerivedItemsA()
{
var list = _context.Items
.Include(x => (x as DerivedItemA).Assignments)
.ToList();
}