实体框架 - 每种类型的表继承 - 现有数据库

时间:2009-02-19 11:59:13

标签: .net entity-framework inheritance orm

我想使用实体框架为现有数据库实现Table Per Type继承。

数据库:

alt text

ImageParagraphs的继承工作非常完美,但由于主键不同(ParagraphID; ParagraphID + LinkID),我无法使用LinkListParagraph创建Table Per Type继承:

  

错误1错误3003:从第113行开始映射片段中的问题:EntitySet段落的所有键属性(Paragraphs.ParagraphID)必须映射到表LinkListParagraph的所有键属性(LinkListParagraph.LinkID,LinkListParagraph.ParagraphID) 。       C:\ Users \ buc \ Documents \ Visual Studio 2008 \ Projects \ ParagraphTest \ ParagraphTest \ ParagraphModel.edmx 114 15 ParagraphTest

是否可以在不更改数据库的情况下解决此问题?

我想做的是这样的事情:

alt text

2 个答案:

答案 0 :(得分:1)

一种方法可能是关于主键的实体框架。这将需要进入EDMX中的商店映射并更改主键标志。但要意识到,如果执行此操作,则每次执行更新时,“从数据库更新模型”向导将尝试“修复”映射。

另一种方法是在数据库中创建一个视图并映射视图而不是表。

答案 1 :(得分: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>

在我的案例中评论了不必要的PropertyRef,如上所述,解决了出错的问题:错误3003。