2013-08-23 123 views
1

我有一對夫婦類設置的,像這樣:實體框架5.0和繼承

會員(摘要)

  • Property1
  • Property2(等)

組織會員:會員

  • Property3
  • Property4(等)

PrivateMember:成員

  • Property5
  • Property6(等)

然後我有三個數據庫表結構相同的方式 - 這兩種類型的成員實體公用的數據存儲在成員表中,特定於OrganizationMember的數據存儲在相應的表中,PrivateMember特定的數據存儲在相應的表中。成員表的Id與其他兩個表的Id相同,因爲它是1-1關係 - 只是每種類型都有特定的東西的分類。這裏可能並不重要,但沒有任何東西可以直接成爲會員 - 它們必須是兩種類型之一。如果我告訴OrganizationMember忽略從成員繼承的屬性,我會得到「你不能在屬性上使用Ignore方法'[TypeName]'上的'[PropertyName]',因爲此類型繼承自映射該屬性的類型'[BaseType]'。要從模型中排除此屬性,請在基類型上使用NotMappedAttribute或Ignore方法。錯誤。但是,當我告訴它不要忽略從成員繼承的那些屬性時,它會拋出一個錯誤(「映射片段中的問題從[[]] [TypeName]開始映射到表成員中的相同行。映射條件可用於區分這些類型映射到的行。「)。這裏真正令人沮喪的部分是錯誤的屬性根本不應該映射到任何實體 - 它們是我整體框架設計的一部分,但根本沒有數據庫相關性,並且不存在。

我會認爲這是一個非常標準的設置,但EF真的不是很好。有什麼建議麼?

回答

2

本文介紹繼承類型的映射。它列出了處理映射到繼承的不同方法,具體取決於你想實現的目標。

http://msdn.microsoft.com/en-us/data/jj591617.aspx#2.5

+0

這看起來完全像我以後。我會進一步審查,如果是的話,我會將其標記爲已接受。感謝您及時的回覆! – RubyHaus

+0

映射繼承類型有點棘手...所以如果你無法弄清楚,發佈你的映射代碼的樣本,也許我們可以提供幫助。 – Arsen

+0

它花費了一些壓力,但我得到它的工作。成員類正在使用一個名爲Address的密封類,目的是讓所有需要它的對象共享一個通用Address對象(而不是將所有地址特定的屬性添加到每個單獨的類)。事實證明,即使你明確地告訴它這些屬性的去向,EF也不喜歡這樣做。感謝您指點我正確的方向! – RubyHaus

0

三種不同的方法來表示代碼優先的繼承層次:表格每一個分層,表每類型,表每個具體類。 Here is details.