2009-02-19 41 views
1

我想用實體框架爲現有數據庫實現Table Per Type繼承。實體框架 - 每種類型的表繼承 - 現有數據庫

數據庫:

alt text

爲ImageParagraphs繼承完美的作品,但我不能做一個表每種類型的繼承與LinkListParagraph因爲不同的主鍵(ParagraphID; ParagraphID +鏈路ID) :

錯誤1錯誤3003:問題在映射片段起始於線113:該EntitySet的段的所有關鍵性能(Paragraphs.ParagraphID)必須被映射到所有的關鍵性質(LinkListParagraph.LinkID,表LinkListParagraph的LinkListParagraph.ParagraphID)。 C:\用戶\ BUC \文檔\ Visual Studio 2008的\項目\ ParagraphTest \ ParagraphTest \ ParagraphModel.edmx 114 15 ParagraphTest

有沒有辦法解決這個問題,而對數據庫的修改成爲了可能?

我想要做的是這樣的:

alt text

回答

1

一種方式是騙實體框架的左右主鍵。這需要進入EDMX中的商店映射並更改主鍵標誌。然而,意識到如果你這樣做,那麼從數據庫嚮導更新模型嚮導會在你每次更新時嘗試「修復」你的映射。

另一種方法是在數據庫中創建視圖並映射視圖而不是表格。

0

主要問題來自實體框架的不必要的默認鍵創建。 嘗試打開xml格式.edmx文件,現在你會查看以下似的東西:

<EntityType Name="GSKItemDetails"> 
      <Key> 
      <PropertyRef Name="ItemId" /> 
      <!--<PropertyRef Name="Description" /> 
      <PropertyRef Name="NDCNumber" />--> 
      </Key> 
      <Property Name="ItemId" Type="varchar" Nullable="false" MaxLength="47" /> 
      <Property Name="Description" Type="varchar" Nullable="false" MaxLength="30" /> 
      <Property Name="NDCNumber" Type="varchar" Nullable="false" MaxLength="16" /> 
      <Property Name="UnitPrice" Type="decimal" Precision="19" Scale="4" /> 
     </EntityType> 

在我的情況commentingout的unnecessasary PropertyRefs,如上文所述,解決了給錯誤的問題:錯誤3003