2009-02-19 80 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