我对特定的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; }
...
}
现在,我想获取所有DerivedItemA
的列表并包括其属性。
我有以下方法:
public List<DerivedItemA> GetDerivedItemsA()
{
var list = _context.Items
.Include(x => (x as DerivedItemA).Assignments)
.ToList();
}
这段代码可以很好地编译,这是我在stackoverflow上发现的。
但是,执行此操作会导致短信Invalid include
异常。
我不知道如何解决这个问题。
该项目是数据库优先的方法,因此我无法控制数据库。
所有项目都存储在同一表item
中。
我无法创建多个DbSets
,因为该表中没有鉴别符列,
无法在代码中配置自定义标识符,因为它需要根据多个属性而非一个属性进行区分。
还有其他方法吗?
目前,我正在通过迭代所有ItemContext.Items
然后在每个.Select()
上创建一个new DerivedItemA
来解决它。之后,我通过从Assignment
表进行迭代来手动设置每个Assignment
。
但是,这种方法花费的时间太长,如果我可以将其包括在初始查询中,则会更快。