实体框架代码第一和多个程序集

时间:2011-03-21 14:02:48

标签: entity-framework code-first

我在其基类的不同程序集中有一个子类。父级是用于EF Code First的POCO类。

当我尝试将继承类的实例添加到数据库时,我得到 InvalidOperationException: “找不到具有标识的类型'Foo的对象映射.Bar.MyInheritedClass'”。

如果子类与基类在同一个程序集中,它可以正常工作。

在常规EF中,solution seems to be调用 ObjectContext.MetadataWorkspace.LoadFromAssembly(assembly)。但我无法弄清楚这与Code First有什么关系。

有什么建议吗?

我正在使用 Entity Framework 4.1 RC。

3 个答案:

答案 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的导航属性,则需要在相应类中使用具有相同名称的声明变量。