如何首先通过设置忽略实体框架代码中的实体

时间:2011-10-25 08:33:37

标签: entity-framework entity-framework-4

假设我有4个班级:

public class Component {}
public class SubComponent1 : Component {}
public class SubComponent2 : Component {}
public class Container : Component { 
  public List<Component> components { get; set;}
}

我不想将SubComponent2存储在数据库中。我想在整个应用程序中使用它作为普通的POCO,只想在尝试保存到数据库时忽略它。 到目前为止我尝试过的是在我的DbContext OnModelCreating方法中使用Ignore:

dbModelBuilder.Ignore<SubComponent2>();

然后尝试在数据库中保存一些包含SubComponent2的结构,希望SubComponent2只是被忽略,因此不会保存。 所以基本上是这样的:

var someContainer = new Container{ components = new List<Component>{ 
  new SubComponent1(), new SubComponent2() 
};
context.Containers.Add(someContainer);

并希望只有带有SubComponent1的Container才能进入数据库。 我得到的是

  

无法找到EntityType'SubComponent2'

的映射和元数​​据信息

我知道我可以简单地手动删除所有SubComponent2-s,然后将Container添加到上下文中,保存然后以某种方式重新附加SubComponent2-s,但是当我希望实体框架能够解决时,这似乎是对更大结构的过多开销这个“为了我”

你知道有什么好办法吗(我的DbContext中的dbModelBuilder设置可能有些变化)?

1 个答案:

答案 0 :(得分:0)

我认为目前没有支持。您可以忽略派生实体,因此它不会映射,但您不能在保存期间在导航属性中使用它。我没有测试它,但我几乎可以肯定EF没有逻辑来跳过继承映射中被忽略的实体,因为被忽略的实体根本不属于持久化集合。