2011-05-01 68 views
2

我在一个dll中有一个edmx,并且需要在另一个dll中的edmx中有一个实体继承自第一个edmx中的实体。我曾尝试将第一个edmx的初始上下文与第二个edmx扩展,但没有成功。什么是完成这个最好的方法?实体框架中两个上下文之间的继承

+0

这可能有帮助:http://stackoverflow.com/questions/5558309/entity-framework-inserting-entity-with-multiple-models-and-databases/5598664#5598664 – 2011-05-07 00:38:40

+0

我能够使用EF代码完成此操作首先和这:http://stackoverflow.com/questions/6300990/ef-ctp5-context-inheritance-across-multiple-assemblies – kroehre 2011-10-09 00:06:56

+0

这是为什么downvoted? – kroehre 2011-10-10 14:47:47

回答

1

这是不可能的。一个EDMX =一个ObjectContext,其中没有继承。我发现了一个special hack如何强制上下文来加载多个EDMX,但它们必须在同一个程序集中,并且它仅适用于交叉EDMX linq-to-entities查询。

我认为你必须在第二个EDMX中再次建模整个继承层次结构,并且为parent = parent实体重用相同的POCO类必须在两个EDMX中。查看这些关于使用多个型号的文章(part 1part 2)。有可能从其他EDMX中的一个EDMX中重用CSDL类型来定义关联,但它不能用于继承,因为MSL中定义了不能重用的继承。

+0

我最终重新思考我的逻辑,所以这不再是一项要求。我希望这是可能的,希望Entity Framework将来能够做类似的事情。 – kroehre 2011-05-06 21:36:42

0

继承可能不是最好的解决方案。我会建议来自不同组件的依赖注入,例如:

public class CompositeObj 
{ 
    protected ObjectType1 obj1 { get; set; } 
    protected ObjectType2 obj2 { get; set; } 

    public CompositeObj(ObjectType1 obj1, ObjectType2 obj2) 
    { 
     this.obj1 = obj1; 
     this.obj2 = obj2; 
    } 

    public string Property1 { get { return this.obj1.Property1; } } 
    public string Property2 { get { return this.obj2.Property2; } } 
    pulbic string Property3 { get { return this.obj1.Property1 + this.obj2.Property2; } } 
}