【问题标题】:Entity Framework - Table Per Type Inheritance - Existing Database实体框架 - 按类型继承的表 - 现有数据库
【发布时间】:2010-10-08 13:49:40
【问题描述】:

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

数据库:

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

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

我想做的是这样的:

【问题讨论】:

    标签: .net entity-framework inheritance orm


    【解决方案1】:

    一种方法可能是就主键向实体框架撒谎。这将需要进入 EDMX 中的存储映射并更改主键标志。但是请注意,如果您这样做,那么从数据库更新模型向导将在您每次进行更新时尝试“修复”您的映射。

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

    【讨论】:

      【解决方案2】:

      主要问题来自实体框架不必要的默认键创建。 尝试以 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>
      

      在我的例子中,如上所述,注释掉不必要的 PropertyRefs,解决了给出错误的问题:错误 3003。

      【讨论】:

        猜你喜欢
        • 2016-06-02
        • 2015-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-21
        相关资源
        最近更新 更多