我在嘗試讓繼承在EF4中工作時遇到了相當多的麻煩。原始模型非常大,但是我已經設法將它複製到只有兩個實體的模型中。EF4按類型使用表的繼承問題
基本上這兩個表是「資產」和「問卷」。調查問卷繼承資產(即問卷是資產)。他們通過問卷調查將資產ID鏈接回資產。技術上的設計可能不是最好的,但是我正在努力使這項工作對於一個10歲的數據庫沒有任何重大的重新設計...
所以鑑於此,該表是:
資產
- 由assetid唯一標識符NOT NULL - 此表的主鍵
- 其他無關列
Content_Questionnaire
- 標識的唯一標識符NOT NULL - 此表的主鍵
- 由assetid唯一標識符NOT NULL - 外鍵Asset.AssetID
- 其他無關列
的模型這是非常簡單 - 實質上它是:
這樣做的EDMX文件是:
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="SnapServerModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
<EntityContainer Name="SnapServerModelStoreContainer">
<EntitySet Name="Asset" EntityType="SnapServerModel.Store.Asset" store:Type="Tables" Schema="dbo" />
<EntitySet Name="Content_Questionnaire" EntityType="SnapServerModel.Store.Content_Questionnaire" store:Type="Tables" Schema="dbo" />
<AssociationSet Name="FK_Content_Questionnaire_Asset" Association="SnapServerModel.Store.FK_Content_Questionnaire_Asset">
<End Role="Asset" EntitySet="Asset" />
<End Role="Content_Questionnaire" EntitySet="Content_Questionnaire" />
</AssociationSet>
</EntityContainer>
<EntityType Name="Asset">
<Key>
<PropertyRef Name="AssetID" />
</Key>
<Property Name="AssetID" Type="uniqueidentifier" Nullable="false" />
</EntityType>
<EntityType Name="Content_Questionnaire">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Name="Id" Type="uniqueidentifier" Nullable="false" />
<Property Name="AssetID" Type="uniqueidentifier" Nullable="false" />
</EntityType>
<Association Name="FK_Content_Questionnaire_Asset">
<End Role="Asset" Type="SnapServerModel.Store.Asset" Multiplicity="1" />
<End Role="Content_Questionnaire" Type="SnapServerModel.Store.Content_Questionnaire" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Asset">
<PropertyRef Name="AssetID" />
</Principal>
<Dependent Role="Content_Questionnaire">
<PropertyRef Name="AssetID" />
</Dependent>
</ReferentialConstraint>
</Association>
</Schema></edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema Namespace="SnapServerModel" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityContainer Name="SnapServerEntities" annotation:LazyLoadingEnabled="true">
<EntitySet Name="Assets" EntityType="SnapServerModel.Asset" />
<AssociationSet Name="FK_Content_Questionnaire_Asset" Association="SnapServerModel.FK_Content_Questionnaire_Asset">
<End Role="Asset" EntitySet="Assets" />
<End Role="Content_Questionnaire" EntitySet="Assets" />
</AssociationSet>
</EntityContainer>
<EntityType Name="Asset">
<Key>
<PropertyRef Name="AssetID" />
</Key>
<Property Type="Guid" Name="AssetID" Nullable="false" />
<NavigationProperty Name="Content_Questionnaire" Relationship="SnapServerModel.FK_Content_Questionnaire_Asset" FromRole="Asset" ToRole="Content_Questionnaire" />
</EntityType>
<EntityType Name="Content_Questionnaire" BaseType="SnapServerModel.Asset">
<Property Type="Guid" Name="Id" Nullable="false" />
<NavigationProperty Name="Asset" Relationship="SnapServerModel.FK_Content_Questionnaire_Asset" FromRole="Content_Questionnaire" ToRole="Asset" />
</EntityType>
<Association Name="FK_Content_Questionnaire_Asset">
<End Type="SnapServerModel.Asset" Role="Asset" Multiplicity="1" />
<End Type="SnapServerModel.Content_Questionnaire" Role="Content_Questionnaire" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Asset">
<PropertyRef Name="AssetID" />
</Principal>
<Dependent Role="Content_Questionnaire">
<PropertyRef Name="AssetID" />
</Dependent>
</ReferentialConstraint>
</Association>
</Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs">
<EntityContainerMapping StorageEntityContainer="SnapServerModelStoreContainer" CdmEntityContainer="SnapServerEntities">
<EntitySetMapping Name="Assets">
<EntityTypeMapping TypeName="IsTypeOf(SnapServerModel.Asset)">
<MappingFragment StoreEntitySet="Asset">
<ScalarProperty Name="AssetID" ColumnName="AssetID" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="IsTypeOf(SnapServerModel.Content_Questionnaire)">
<MappingFragment StoreEntitySet="Content_Questionnaire">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="AssetID" ColumnName="AssetID" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<Designer xmlns="http://schemas.microsoft.com/ado/2008/10/edmx">
<Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
</DesignerInfoPropertySet>
</Connection>
<Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true" />
<DesignerProperty Name="EnablePluralization" Value="True" />
<DesignerProperty Name="IncludeForeignKeysInModel" Value="True" />
</DesignerInfoPropertySet>
</Options>
<!-- Diagram content (shape and connector positions) -->
<Diagrams>
<Diagram Name="Model1">
<EntityTypeShape EntityType="SnapServerModel.Asset" Width="1.5" PointX="0.75" PointY="2.125" Height="1.4033821614583335" />
<EntityTypeShape EntityType="SnapServerModel.Content_Questionnaire" Width="1.5" PointX="3" PointY="2.125" Height="1.4033821614583339" />
<AssociationConnector Association="SnapServerModel.FK_Content_Questionnaire_Asset" >
<ConnectorPoint PointX="2.25" PointY="2.4133455403645834" />
<ConnectorPoint PointX="3" PointY="2.4133455403645834" />
</AssociationConnector>
<InheritanceConnector EntityType="SnapServerModel.Content_Questionnaire" ManuallyRouted="false" >
<ConnectorPoint PointX="2.25" PointY="2.8266910807291667" />
<ConnectorPoint PointX="3" PointY="2.8266910807291667" />
</InheritanceConnector>
</Diagram>
</Diagrams>
</Designer>
</edmx:Edmx>
現在我的問題是,不管是什麼我已經試過 - 我得到兩個錯誤消息:
- 錯誤1個錯誤3002:從第87行開始映射片段的問題:表Content_Questionnaire的鍵(Content_Questionnaire.Id)的潛在運行時衝突:列(Content_Questionnaire.Id)在概念方面映射到EntitySet Assets的屬性(Assets.Id),但它們不構成EntitySet的關鍵屬性(Assets.AssetID)。
- 錯誤2錯誤3003:從第87行開始的映射片段中的問題:EntitySet資產的所有關鍵屬性(Assets.AssetID)都必須映射到表Content_Questionnaire的所有關鍵屬性(Content_Questionnaire.Id)。
我究竟如何擺脫這些錯誤?
這可能是完全顯而易見的東西,我很想念 - 然而任何幫助或甚至在正確的方向微調將不勝感激。今天我已經收到了一些灰頭髮試圖通過這個工作!
在此先感謝您提供的任何幫助。
爲什麼你有一對一的關係? – 2010-10-11 04:15:40
謝謝 - 這是以下解決方案中的問題之一:應該沒有指定那種關係。不幸的是,設計師投入了它 - 它需要一點核心理解才能修復設計師看起來的東西! – 2010-10-11 15:26:06