问题描述
|
我有一个与基类不同的程序集中的子类。父级是用于EF Code First的POCO类。
当我尝试将继承的类的实例添加到数据库时,我收到InvalidOperationException:\“找不到标识为\'Foo.Bar.MyInheritedClass \'\的Type的对象映射。
如果子类与基类在同一程序集中,则效果很好。
在常规EF中,解决方案似乎是对ObjectContext.MetadataWorkspace.LoadFromAssembly(assembly)的调用。但是我不知道这与Code First有何关系。
有什么建议吗?
我正在使用Entity Framework 4.1 RC。
解决方法
我通过从第一个程序集的DbContext继承,为派生类添加DbSet <>,然后向其添加派生类型的新实例来解决此问题。
在此处将代码发布在MSDN论坛上。
, 我知道这篇文章有点老了,但是我可以在构造函数中使用@Dave \的推荐来实现:
public Context() {
((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(
System.Reflection.Assembly.GetAssembly(
typeof(--[Inherited DbContext]--)));
}
, 我是EF(实体框架4)的新手,在更改模型时遇到了同样的异常。
我的问题原来是,我不知道EF是否需要所有导航属性上的所有名称都同意,而不仅是它们的类型。例如,如果有一个名为foo的导航属性,则在相应的类中需要有一个具有相同名称的声明变量。