Entity Framework 5.0继承多个程序集

时间:2013-04-05 20:03:15

标签: entity-framework inheritance entity-framework-5 table-per-hierarchy

我正在使用Entity Framework 5.0和代码优先方法以及由Table Per Hierarchy表示的业务对象的继承。

我想拥有以下结构:

//Assembly 'DataAccess'    
public class MyDbContext : DbContext
{
    DbSet<AbstractClass> CommonObjects.AbstractClasses { get; set; }
}

//Assembly 'CommonObjects'  
public abstract class AbstractClass
{
    //implementation
}

//Assembly 'DerivedObjects'   
public class DerivedClass : AbstractClass
{
    //implementation
}

在运行时,第一次尝试访问DbContext时,编译器会抛出InvalidOperationException:

  

抽象类型&#39; CommonObjects.AbstractClass&#39;没有映射的后代   所以无法映射。删除&#39; CommonObjects.AbstractClass&#39;从   模型或添加一个或多个派生类型   &#39; CommonObjects.AbstractClass&#39;到模特。

这种情况甚至可能吗?如果是的话,我做错了什么?

提前感谢您的回答。

其他信息:

也许我应该更具体一点:

我有一个包含我的抽象业务对象的程序集(只有抽象)。具体实现(包含逻辑)保存在负责的程序集中,因为它们的逻辑依赖于该程序集中的其他类。问题是,我希望能够在persistance层中存储这些conrete实现。但为此目的,EF必须知道这些类型才能实现映射。但我不想让持久层依赖于我的业务逻辑层 - 只有抽象。

这就是为什么我尝试直接从业务对象层将派生对象添加到DbContext的原因。

示例:

AbstractClass derivedClass = new DerivedClass();
MyDbContext.AbstractClasses.Add(derivedClass); 

但是上面的例外被抛出了。我无法找到一个良好的结构来实现这一目标。

0 个答案:

没有答案