表格每个类型错误 [英] Table per Type error

查看:58
本文介绍了表格每个类型错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我刚刚开始查看实体框架,但在执行我如何:使用实体框架工具对每种类型继承建模表?视频。

我的数据库表格为:

评估:
evaluation_Id(PK,int,not null)
user_ID(int ,not not null)
评论(文字,非空)
其他字段省略....

评价整体:
评价_Id(FK ,int,not null)
master_ID(int,not null)

在emdx设计器中,我跟着视频从Evaluation创建了EvaluationOverall的继承,从中删除了外键关系设计器,从EvaluationOverall的标量属性中删除了evaluation_ID(因为它继承自Evaluation),然后在Mapping Details中重新映射到evaluation_ID。

当我验证它时会出现以下错误:

错误3003:从第100行开始映射片段中的问题:EntitySet评估的所有关键属性(Evaluation.evaluation_ID)必须映射到所有关键属性(EvaluationOverall.evaluation_ID,EvaluationOverall.master_ID)表评估ionOverall。

我的edmx文件是:


<?xml version =" 1.0"编码= QUOT; UTF-8英寸;?> 
< edmx:Edmx Version =" 1.0"的xmlns:EDMX = QUOT; HTTP://schemas.microsoft.com/ado/2007/06/edmx">
<! - EF运行时内容 - >
< edmx:Runtime>
<! - SSDL内容 - >
< edmx:StorageModels>
< Schema Namespace =" MHS_TestModel.Store"别名= QUOT;自"提供商= QUOT; System.Data.SqlClient的" ProviderManifestToken = QUOT; 2005"的xmlns:商店= QUOT; HTTP://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"的xmlns = QUOT; HTTP://schemas.microsoft.com/ado/2006/04/edm/ssdl">
< EntityContainer Name =" MHS_TestModelStoreContainer">
< EntitySet Name ="评估"的EntityType = QUOT; MHS_TestModel.Store.Evaluation"商店:种类="表"架构= QUOT; DBO" />
< EntitySet Name =" EvaluationOverall"的EntityType = QUOT; MHS_TestModel.Store.EvaluationOverall"商店:种类="表"商店:架构= QUOT; DBO"商店:名称= QUOT; EvaluationOverall">
< DefiningQuery> SELECT
[EvaluationOverall]。[evaluation_ID] AS [evaluation_ID],
[EvaluationOverall]。[master_ID] AS [master_ID]
FROM [dbo]。[ EvaluationOverall] AS [EvaluationOverall]< / DefiningQuery>
< / EntitySet>
< AssociationSet Name =" FK_EvaluationOverall_Evaluation"协会= QUOT; MHS_TestModel.Store.FK_EvaluationOverall_Evaluation">
< End Role ="评估" EntitySet的= QUOT;评价" />
< End Role =" EvaluationOverall" EntitySet的= QUOT; EvaluationOverall" />
< / AssociationSet>
< / EntityContainer>
< EntityType Name =" Evaluation">
< Key>
< PropertyRef Name =" evaluation_ID" />
< / Key>
< Property Name =" evaluation_ID"类型=" INT"可空= QUOT假QUOT; />
< Property Name =" user_ID"类型=" INT"可空= QUOT假QUOT; />
< Property Name =" PARTY_NUMBER"类型=" nvarchar的"可空= QUOT假QUOT;的MaxLength = QUOT 11 QUOT; />
< Property Name ="评论"类型="文本"可空= QUOT假QUOT; />
< Property Name =" DateAdded"类型="日期时间"可空= QUOT假QUOT; />
< Property Name =" DateModified"类型="日期时间" />
< Property Name =" Grade"类型=" TINYINT" />
< Property Name =" PassFail"类型="比特及QUOT; />
< / EntityType>
<! - 生成期间发现的错误:
警告6002:表/视图'MHS_Test.dbo.EvaluationOverall'没有定义主键。已推断密钥,并将定义创建为只读表/视图。
- >
< EntityType Name =" EvaluationOverall">
< Key>
< PropertyRef Name =" evaluation_ID" />
< PropertyRef Name =" master_ID" />
< / Key>
< Property Name =" evaluation_ID"类型=" INT"可空= QUOT假QUOT; />
< Property Name =" master_ID"类型=" INT"可空= QUOT假QUOT; />
< / EntityType>
< Association Name =" FK_EvaluationOverall_Evaluation">
< End Role ="评估"类型=" MHS_TestModel.Store.Evaluation"多重= QUOT 1 QUOT; />
< End Role =" EvaluationOverall"类型=" MHS_TestModel.Store.EvaluationOverall"多重= QUOT * QUOT; />
< ReferentialConstraint>
< Principal Role =" Evaluation">
< PropertyRef Name =" evaluation_ID" />
< / Principal>
< Dependent Role =" EvaluationOverall">
< PropertyRef Name =" evaluation_ID" />
< / Dependent>
< / ReferentialConstraint>
< / Association>
< / Schema>
< / edmx:StorageModels>
<! - CSDL内容 - >
< edmx:ConceptualModels>
< Schema Namespace =" MHS_TestModel"别名= QUOT;自"的xmlns = QUOT; HTTP://schemas.microsoft.com/ado/2006/04/edm">
< EntityContainer Name =" MHS_TestEntities">
< EntitySet Name ="评估"的EntityType = QUOT; MHS_TestModel.Evaluation" />
< / EntityContainer>
< EntityType Name =" Evaluation">
< Key>
< PropertyRef Name =" evaluation_ID" />
< / Key>
< Property Name =" evaluation_ID"类型="&的Int32 QUOT;可空= QUOT假QUOT; />
< Property Name =" user_ID"类型="&的Int32 QUOT;可空= QUOT假QUOT; />
< Property Name =" PARTY_NUMBER"类型="字符串"可空= QUOT假QUOT;的MaxLength = QUOT 11 QUOT;的Unicode = QUOT;真"定长= QUOT假QUOT; />
< Property Name ="评论"类型="字符串"可空= QUOT假QUOT;的MaxLength = QUOT;最大"的Unicode = QUOT假QUOT;定长= QUOT假QUOT; />
< Property Name =" DateAdded"类型=" DateTime的"可空= QUOT假QUOT; />
< Property Name =" DateModified"类型=" DateTime的" />
< Property Name =" Grade"类型="字节" />
< Property Name =" PassFail"类型="布尔" />
< / EntityType>
< EntityType Name =" EvaluationOverall"碱基类型= QUOT; MHS_TestModel.Evaluation">
< Property Name =" master_ID"类型="&的Int32 QUOT;可空= QUOT假QUOT; />
< / EntityType>
< / Schema>
< / edmx:ConceptualModels>
<! - C-S映射内容 - >
< edmx:Mappings>
< Mapping Space =" C-S"的xmlns = QUOT;瓮:架构 - 微软-COM:窗口:存储:映射:CS">
< EntityContainerMapping StorageEntityContainer =" MHS_TestModelStoreContainer" CdmEntityContainer = QUOT; MHS_TestEntities">
< EntitySetMapping Name =" Evaluation">
< EntityTypeMapping TypeName =" IsTypeOf(MHS_TestModel.Evaluation)">
< MappingFragment StoreEntitySet =" Evaluation">
< ScalarProperty Name =" evaluation_ID"的ColumnName = QUOT; evaluation_ID" />
< ScalarProperty Name =" user_ID"的ColumnName = QUOT; USER_ID" />
< ScalarProperty Name =" PARTY_NUMBER"的ColumnName = QUOT; PARTY_NUMBER" />
< ScalarProperty Name =" Comments"的ColumnName = QUOT;意见" />
< ScalarProperty Name =" DateAdded"的ColumnName = QUOT; DateAdded" />
< ScalarProperty Name =" DateModified"的ColumnName = QUOT; DateModified" />
< ScalarProperty Name =" Grade"的ColumnName = QUOT;年级" />
< ScalarProperty Name =" PassFail"的ColumnName = QUOT;通过失败" />
< / MappingFragment>
< / EntityTypeMapping>
< EntityTypeMapping TypeName =" IsTypeOf(MHS_TestModel.EvaluationOverall)">
< MappingFragment StoreEntitySet =" EvaluationOverall">
< ScalarProperty Name =" evaluation_ID"的ColumnName = QUOT; evaluation_ID" />

< ScalarProperty Name =" master_ID"的ColumnName = QUOT; master_ID" />
< / MappingFragment>
< / EntityTypeMapping>
< / EntitySetMapping>
< / EntityContainerMapping>
< / Mapping>
< / edmx:Mappings>
< / edmx:运行时>
<! - EF Designer内容(请勿在此手动编辑) - >
< edmx:Designer xmlns =" http://schemas.microsoft.com/ado/2007/06/edmx">
< edmx:Connection>
< DesignerInfoPropertySet>
< DesignerProperty Name =" MetadataArtifactProcessing"值= QUOT; EmbedInOutputAssembly" />
< / DesignerInfoPropertySet>
< / edmx:连接>
< edmx:选项>
< DesignerInfoPropertySet>
< DesignerProperty Name =" ValidateOnBuild"值= QUOT;真" />
< / DesignerInfoPropertySet>
< / edmx:选项>
<! - 图表内容(形状和连接器位置) - >
< edmx:Diagrams>
< Diagram Name =" Model1">
< EntityTypeShape EntityType =" MHS_TestModel.Evaluation"宽度= QUOT; 1.5" PointX = QUOT; 0.75"尖= QUOT 1 QUOT;高度= QUOT; 2.4140429687499996" IsExpanded = QUOT;真" />
< EntityTypeShape EntityType =" MHS_TestModel.EvaluationOverall"宽度= QUOT; 1.5" PointX = QUOT; 3英寸尖= QUOT 1 QUOT;高度= QUOT; 1.099264322916667" IsExpanded = QUOT;真" />
< InheritanceConnector EntityType =" MHS_TestModel.EvaluationOverall">
< ConnectorPoint PointX =" 2.25"尖= QUOT; 1.5496321614583335" />
< ConnectorPoint PointX =" 3"尖= QUOT; 1.5496321614583335" />< / InheritanceConnector>< /图>< / EDMX:图表>
< / edmx:Designer>
< / edmx:Edmx>




任何帮助表示赞赏!
汤姆

解决方案

查看您的模型,看起来EvaluationOverall表没有定义主键。如果您将evaluate_ID定义为该表的PKey,那么您应该没问题。问题是EF没有看到该表的PK,因此它使表中的所有列成为Key的一部分,这意味着表键与评估实体类型的键不匹配。

HTH,
诺姆

Hi,

I have just started to look at Entity Framework but have encountered an error after following the How Do I: Model Table per Type Inheritance with the Entity Framework Tools? video.

My db tables are:

Evaluation:
evaluation_Id (PK, int, not null)
user_ID (int, not null)
comments (text, not null)
other fields ommited....

EvaluationOverall:
evaluation_Id (FK, int, not null)
master_ID (int, not null)

In the emdx designer, I have followed the video to create the inheritance of EvaluationOverall from Evaluation, deleted the foreign key relationship from the designer, deleted the evaluation_ID from the scalar properties of EvaluationOverall (because it is inherited from Evaluation) and then re-mapped in the Mapping Details to evaluation_ID.

When I validate it give the following error:

Error 3003: Problem in Mapping Fragment starting at line 100: All the key properties (Evaluation.evaluation_ID) of the EntitySet Evaluation must be mapped to all the key properties (EvaluationOverall.evaluation_ID, EvaluationOverall.master_ID) of table EvaluationOverall.

My edmx files is:


<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
  <!-- EF Runtime content -->
  <edmx:Runtime>
    <!-- SSDL content -->
    <edmx:StorageModels>
      <Schema Namespace="MHS_TestModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2006/04/edm/ssdl">
        <EntityContainer Name="MHS_TestModelStoreContainer">
          <EntitySet Name="Evaluation" EntityType="MHS_TestModel.Store.Evaluation" store:Type="Tables" Schema="dbo" />
          <EntitySet Name="EvaluationOverall" EntityType="MHS_TestModel.Store.EvaluationOverall" store:Type="Tables" store:Schema="dbo" store:Name="EvaluationOverall">
            <DefiningQuery>SELECT 
      [EvaluationOverall].[evaluation_ID] AS [evaluation_ID], 
      [EvaluationOverall].[master_ID] AS [master_ID]
      FROM [dbo].[EvaluationOverall] AS [EvaluationOverall]</DefiningQuery>
          </EntitySet>
          <AssociationSet Name="FK_EvaluationOverall_Evaluation" Association="MHS_TestModel.Store.FK_EvaluationOverall_Evaluation">
            <End Role="Evaluation" EntitySet="Evaluation" />
            <End Role="EvaluationOverall" EntitySet="EvaluationOverall" />
          </AssociationSet>
        </EntityContainer>
        <EntityType Name="Evaluation">
          <Key>
            <PropertyRef Name="evaluation_ID" />
          </Key>
          <Property Name="evaluation_ID" Type="int" Nullable="false" />
          <Property Name="user_ID" Type="int" Nullable="false" />
          <Property Name="PARTY_NUMBER" Type="nvarchar" Nullable="false" MaxLength="11" />
          <Property Name="Comments" Type="text" Nullable="false" />
          <Property Name="DateAdded" Type="datetime" Nullable="false" />
          <Property Name="DateModified" Type="datetime" />
          <Property Name="Grade" Type="tinyint" />
          <Property Name="PassFail" Type="bit" />
        </EntityType>
        <!--Errors Found During Generation:
      warning 6002: The table/view 'MHS_Test.dbo.EvaluationOverall' does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view.
      -->
        <EntityType Name="EvaluationOverall">
          <Key>
            <PropertyRef Name="evaluation_ID" />
            <PropertyRef Name="master_ID" />
          </Key>
          <Property Name="evaluation_ID" Type="int" Nullable="false" />
          <Property Name="master_ID" Type="int" Nullable="false" />
        </EntityType>
        <Association Name="FK_EvaluationOverall_Evaluation">
          <End Role="Evaluation" Type="MHS_TestModel.Store.Evaluation" Multiplicity="1" />
          <End Role="EvaluationOverall" Type="MHS_TestModel.Store.EvaluationOverall" Multiplicity="*" />
          <ReferentialConstraint>
            <Principal Role="Evaluation">
              <PropertyRef Name="evaluation_ID" />
            </Principal>
            <Dependent Role="EvaluationOverall">
              <PropertyRef Name="evaluation_ID" />
            </Dependent>
          </ReferentialConstraint>
        </Association>
      </Schema>
    </edmx:StorageModels>
    <!-- CSDL content -->
    <edmx:ConceptualModels>
      <Schema Namespace="MHS_TestModel" Alias="Self" xmlns="http://schemas.microsoft.com/ado/2006/04/edm">
        <EntityContainer Name="MHS_TestEntities">
          <EntitySet Name="Evaluation" EntityType="MHS_TestModel.Evaluation" />
        </EntityContainer>
        <EntityType Name="Evaluation">
          <Key>
            <PropertyRef Name="evaluation_ID" />
          </Key>
          <Property Name="evaluation_ID" Type="Int32" Nullable="false" />
          <Property Name="user_ID" Type="Int32" Nullable="false" />
          <Property Name="PARTY_NUMBER" Type="String" Nullable="false" MaxLength="11" Unicode="true" FixedLength="false" />
          <Property Name="Comments" Type="String" Nullable="false" MaxLength="Max" Unicode="false" FixedLength="false" />
          <Property Name="DateAdded" Type="DateTime" Nullable="false" />
          <Property Name="DateModified" Type="DateTime" />
          <Property Name="Grade" Type="Byte" />
          <Property Name="PassFail" Type="Boolean" />
        </EntityType>
        <EntityType Name="EvaluationOverall" BaseType="MHS_TestModel.Evaluation">
          <Property Name="master_ID" Type="Int32" Nullable="false" />
        </EntityType>
      </Schema>
    </edmx:ConceptualModels>
    <!-- C-S mapping content -->
    <edmx:Mappings>
      <Mapping Space="C-S" xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">
        <EntityContainerMapping StorageEntityContainer="MHS_TestModelStoreContainer" CdmEntityContainer="MHS_TestEntities">
          <EntitySetMapping Name="Evaluation">
            <EntityTypeMapping TypeName="IsTypeOf(MHS_TestModel.Evaluation)">
              <MappingFragment StoreEntitySet="Evaluation">
                <ScalarProperty Name="evaluation_ID" ColumnName="evaluation_ID" />
                <ScalarProperty Name="user_ID" ColumnName="user_ID" />
                <ScalarProperty Name="PARTY_NUMBER" ColumnName="PARTY_NUMBER" />
                <ScalarProperty Name="Comments" ColumnName="Comments" />
                <ScalarProperty Name="DateAdded" ColumnName="DateAdded" />
                <ScalarProperty Name="DateModified" ColumnName="DateModified" />
                <ScalarProperty Name="Grade" ColumnName="Grade" />
                <ScalarProperty Name="PassFail" ColumnName="PassFail" />
              </MappingFragment>
            </EntityTypeMapping>
          <EntityTypeMapping TypeName="IsTypeOf(MHS_TestModel.EvaluationOverall)">
              <MappingFragment StoreEntitySet="EvaluationOverall">
                <ScalarProperty Name="evaluation_ID" ColumnName="evaluation_ID" />
               
                <ScalarProperty Name="master_ID" ColumnName="master_ID" />
              </MappingFragment>
            </EntityTypeMapping>
          </EntitySetMapping>
        </EntityContainerMapping>
      </Mapping>
    </edmx:Mappings>
  </edmx:Runtime>
  <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
  <edmx:Designer xmlns="http://schemas.microsoft.com/ado/2007/06/edmx">
    <edmx:Connection>
      <DesignerInfoPropertySet>
        <DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
      </DesignerInfoPropertySet>
    </edmx:Connection>
    <edmx:Options>
      <DesignerInfoPropertySet>
        <DesignerProperty Name="ValidateOnBuild" Value="true" />
      </DesignerInfoPropertySet>
    </edmx:Options>
    <!-- Diagram content (shape and connector positions) -->
    <edmx:Diagrams>
      <Diagram Name="Model1">
        <EntityTypeShape EntityType="MHS_TestModel.Evaluation" Width="1.5" PointX="0.75" PointY="1" Height="2.4140429687499996" IsExpanded="true" />
        <EntityTypeShape EntityType="MHS_TestModel.EvaluationOverall" Width="1.5" PointX="3" PointY="1" Height="1.099264322916667" IsExpanded="true" />
        <InheritanceConnector EntityType="MHS_TestModel.EvaluationOverall">
          <ConnectorPoint PointX="2.25" PointY="1.5496321614583335" />
          <ConnectorPoint PointX="3" PointY="1.5496321614583335" /></InheritanceConnector></Diagram></edmx:Diagrams>
  </edmx:Designer>
</edmx:Edmx>



Any help appreciated!
Tom

 

解决方案

Looking at your model, it looks like the EvaluationOverall table has no primary key defined. If you define evaluation_ID as the PKey for that table, you should be ok. The issue is that the EF doesn't see a PK for that table, so it makes all of the columns in the table part of the Key, which means that the tables key does not match the Evaluation entity type's key.

HTH,
 Noam


这篇关于表格每个类型错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆