2015-04-01 95 views
1

我有2個表,產品(我的基地)和OffShelfItems的(子)EF6 - TPT - 繼承 - 數據庫首先

我對ID字段的外鍵的設置,這裏是這個設置的截圖:

enter image description here

在我的EDMX,我已經導入的表,並建立OffShelfItem是產品類的成員,這裏是設置的屏幕截圖:

enter image description here

然而,當我嘗試保存的對象與此測試代碼:

OffShelfItem osi = new OffShelfItem(); 
      osi.WhenAdded = DateTime.Now; 
      osi.LastModified = DateTime.Now; 
      osi.IsDeleted = false; 
      osi.Title = "TEST ITEM"; 
      osi.RetailPrice = 9.99M; 
      osi.DealerPrice = 7.99M; 
      ent.Products.Add(osi); 
      ent.SaveChanges(); 

我得到這個錯誤:

Schema specified is not valid. Errors: App_Code.Model.ssdl(75,6) : error 0113: Multiplicity is not valid in Role 'AA_OffShelfItems' in relationship 'FK_AA_OffShelfItems_AA_Products'. Because the Dependent Role refers to the key properties, the upper bound of the multiplicity of the Dependent Role must be 1.

我覺得我一定很接近得到這個工作,我只需要幫助到達那裏!

+0

有一個在EDMX,這通常意味着該外鍵在某種程度上沒有定義沒有導航屬性。當我試圖將實體直接添加到edmx的xml中,忘記設置一些連接屬性時,我發現錯誤。 – thsorens 2015-04-01 21:22:49

+0

在這種情況下應該沒有,我希望OffShelfItems類從產品繼承,而不是它的子對象 – box86rowh 2015-04-01 21:37:23

回答

1

id需要成爲AA_OffShelfItems表中的主鍵。

尼斯解釋一下:

https://leftlobed.wordpress.com/2011/03/02/getting-to-know-entity-framework-table-per-type-tpt-inheritance/

[更新:]:

EF Database First with TPT Inheritance only creates DbSet<T> for base clases

然後,您可以在這個答案描述延長你的背景下訪問OffShelfItems像這樣的東西:

context.Products.OfType<OffShelfItem>() 

或:

partial class Context 
{ 
    public DbSet<OffShelfItem> OffShelfItem{ get; set; } 
} 
+0

好吧,所以我已經完成了這一步,現在我可以成功地運行上面的代碼,我的一個元素現在缺少的是如何從數據庫上下文獲取我的OffShelfItems?現在它將實體集名稱設置爲「產品」 – box86rowh 2015-04-01 21:59:19

+0

使用部分類擴展您的上下文類:http://stackoverflow.com/questions/22973186/ef-database-first-with-tpt-inheritance-only-creates -dbsett-for-base-clases(回答現在更新) – 2015-04-01 22:02:12

+0

謝謝你的工作很棒! – box86rowh 2015-04-01 22:08:53