我在其基类的不同程序集中有一个子类。父级是用于EF Code First的POCO类。
当我尝试将继承类的实例添加到数据库时,我得到 InvalidOperationException: “找不到具有标识的类型'Foo的对象映射.Bar.MyInheritedClass'”。
如果子类与基类在同一个程序集中,它可以正常工作。
在常规EF中,solution seems to be调用 ObjectContext.MetadataWorkspace.LoadFromAssembly(assembly)。但我无法弄清楚这与Code First有什么关系。
有什么建议吗?
我正在使用 Entity Framework 4.1 RC。
答案 0 :(得分:3)
我通过继承第一个组合的DbContext解决了这个问题,添加了一个DbSet<>为派生类,然后添加派生类型的新实例。
在MSDN论坛here.
上发布了代码答案 1 :(得分:2)
我知道这篇文章有点陈旧,但我能够在构造函数中使用@ Dave的推荐完成此任务:
public Context() {
((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(
System.Reflection.Assembly.GetAssembly(
typeof(--[Inherited DbContext]--)));
}
答案 2 :(得分:1)
我对EF(实体框架4)很陌生,当我在模型中进行更改时,我得到了同样的例外。
我的问题原来是我不知道EF需要所有导航属性上的所有名称都同意,而不仅仅是他们的类型。例如,如果存在名为foo的导航属性,则需要在相应类中使用具有相同名称的声明变量。