【发布时间】:2014-06-15 15:44:53
【问题描述】:
我有两个班级:
public class BaseItem
{
public Guid Id { get; set; }
public string Name { get; set; }
public virtual List<ChildItem> Children { get; set; }
}
public class ChildItem : BaseItem
{
public virtual BaseItem Parent { get; set; }
public ChildItem() { }
}
我为这两个类创建了一个 DBContext 和两个 DBSet。基本上,BaseItem 是根类,其下有一棵子项树。数据库将包含许多这样的树。
实体框架将为这两个类创建一个表,我不喜欢它,但现在它已经足够好了。 (我可以告诉 EF 以简单的方式将其分成两个表吗?)
我的问题是只选择根项目,因此选择 BaseItem 类的任何内容,而不是 ChildItem 类的任何内容。类似的东西
db.Items.Where(i=>i.GetType()==typeof(BaseItem))
这不起作用,因为 EF 无法将 GetType 方法转换为对数据库有意义的方法。因此,我要么在 Where 子句之前添加 .ToList(),要么找到更好的解决方案。
由于我不想在过滤掉 500 个根项之前检索所有 1,000,000 条记录,因此我需要更好的解决方案。什么是更好的解决方案?
这就是 DBContext(db 变量)和 DBSet(db 的 Items 属性)的定义方式。
public class Datamodel : DbContext
{
public Datamodel() : base("name=Datamodel") { }
public virtual DbSet<BaseItem> Items { get; set; }
public virtual DbSet<ChildItem> Children { get; set; }
}
【问题讨论】:
-
我设法通过在每个类中添加
[Table("Items", Schema = "Datamodel")]之类的内容来创建单独的表。所以,这不是一个真正的问题,尽管我必须决定我喜欢什么。
标签: c# types visual-studio-2013 poco entity-framework-6