2011-05-01 58 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; } } 
}