Gewusst wie: Definieren eines Modells mit einer einzelnen Entität, der zwei Tabellen zugeordnet werden
Wenn Sie ältere Daten in einem Entity Data Model (EDM) verwenden, ist es manchmal sinnvoll, einer einzelnen Entität zwei Tabellen in der Datenbank zuzuordnen. Dies ist möglich, wenn die beiden Tabellen einen gemeinsamen Schlüssel haben, wie z. B. die Tabellen "Customer" und "Store" der im Lieferumfang von SQL Server 2005 enthaltenen "AdventureWorks"-Beispieldatenbank.
Erstellen Sie ein EDM, das die Tabellen "Customer" und "Store" der "AdventureWorks"-Datenbank verwendet, und ändern Sie die EDMX-Datei, wie in den folgenden Abschnitten dargestellt. Verwenden Sie den im Thema Gewusst wie: Erstellen und Ausführen von Objektabfragen mit einer Entität, die separaten Tabellen zugeordnet ist veranschaulichten Code, um dieses Datenmodell zu testen.
So implementieren Sie die CSDL-Anforderungen
Suchen Sie in der EDMX-Datei den Abschnitt <edmx:ConceptualModels>.
Entfernen Sie die <EntityType>-Tags, die die Entität "Customer" darstellen.
Entfernen Sie die <Key>-Tags, die <PropertyRef>-Tags sowie den Namen und den Bezeichner "StoreID" der nun gelöschten Entität "Customer".
Verschieben Sie die Eigenschaften der gelöschten Entität "Customer" in die <EntityType>-Tags der Entität "Store".
Benennen Sie die rowguid-Eigenschaft der gelöschten Entität "Customer" in "Cust_rowguid um.
Benennen Sie die ModifiedDate-Eigenschaft der nun gelöschten Entität "Customer" in Cust_ModifiedDate um.
Das konzeptionelle Schema sieht wie folgt aus.
<edmx:ConceptualModels>
<Schema Namespace="AdventureWorksModel" Alias="Self"
xmlns="https://schemas.microsoft.com/ado/2006/04/edm">
<EntityContainer Name="AdventureWorksEntities">
<EntitySet Name="Store"
EntityType="AdventureWorksModel.Store" />
</EntityContainer>
<EntityType Name="Store">
<Key>
<PropertyRef Name="CustomerID" />
</Key>
<Property Name="CustomerID" Type="Int32" Nullable="false" />
<Property Name="Name" Type="String"
Nullable="false" MaxLength="50" />
<Property Name="SalesPersonID" Type="Int32" />
<Property Name="Demographics" Type="String"
MaxLength="1073741823" />
<Property Name="rowguid" Type="Guid" Nullable="false" />
<Property Name="ModifiedDate" Type="DateTime"
Nullable="false" />
<Property Name="TerritoryID" Type="Int32" />
<Property Name="AccountNumber" Type="String"
Nullable="false"
MaxLength="10" Unicode="false" />
<Property Name="CustomerType" Type="String"
Nullable="false"
MaxLength="1" FixedLength="true" />
<Property Name="Cust_rowguid" Type="Guid"
Nullable="false" />
<Property Name="Cust_ModifiedDate" Type="DateTime"
Nullable="false" />
</EntityType>
</Schema>
</edmx:ConceptualModels>
So implementieren Sie die SSDL-Anforderungen
Suchen Sie in der EDMX-Datei den Abschnitt <edmx:StorageModels>.
Nehmen Sie an folgendem SSDL-Schema keine Änderungen vor:
<edmx:StorageModels>
<Schema Namespace="AdventureWorksModel.Store" Alias="Self"
Provider="System.Data.SqlClient"
ProviderManifestToken="2005"
xmlns="https://schemas.microsoft.com/ado/2006/04/edm/ssdl">
<EntityContainer Name="Sales">
<EntitySet Name="Customer"
EntityType="AdventureWorksModel.Store.Customer" />
<EntitySet Name="Store"
EntityType="AdventureWorksModel.Store.Store" />
<AssociationSet Name="FK_Store_Customer_CustomerID"
Association="AdventureWorksModel.Store.FK_Store_Customer_CustomerID">
<End Role="Customer" EntitySet="Customer" />
<End Role="Store" EntitySet="Store" />
</AssociationSet>
</EntityContainer>
<EntityType Name="Customer">
<Key>
<PropertyRef Name="CustomerID" />
</Key>
<Property Name="CustomerID" Type="int"
Nullable="false" StoreGeneratedPattern="Identity" />
<Property Name="TerritoryID" Type="int" />
<Property Name="AccountNumber" Type="varchar"
Nullable="false" MaxLength="10" />
<Property Name="CustomerType" Type="nchar"
Nullable="false" MaxLength="1" />
<Property Name="rowguid"
Type="uniqueidentifier" Nullable="false" />
<Property Name="ModifiedDate" Type="datetime"
Nullable="false" />
</EntityType>
<EntityType Name="Store">
<Key>
<PropertyRef Name="CustomerID" />
</Key>
<Property Name="CustomerID" Type="int" Nullable="false" />
<Property Name="Name" Type="nvarchar"
Nullable="false" MaxLength="50" />
<Property Name="SalesPersonID" Type="int" />
<Property Name="Demographics" Type="xml" />
<Property Name="rowguid" Type="uniqueidentifier"
Nullable="false" />
<Property Name="ModifiedDate" Type="datetime"
Nullable="false" />
</EntityType>
<Association Name="FK_Store_Customer_CustomerID">
<End Role="Customer"
Type="AdventureWorksModel.Store.Customer" Multiplicity="1" />
<End Role="Store" Type="AdventureWorksModel.Store.Store"
Multiplicity="0..1" />
<ReferentialConstraint>
<Principal Role="Customer">
<PropertyRef Name="CustomerID" />
</Principal>
<Dependent Role="Store">
<PropertyRef Name="CustomerID" />
</Dependent>
</ReferentialConstraint>
</Association>
</Schema>
</edmx:StorageModels>
So implementieren Sie die MSL-Anforderungen
Suchen Sie in der der EDMX-Datei den Abschnitt <edmx:Mappings>.
Entfernen Sie die <EntitySetMapping>-Tags für die "Customer"-Entitätenmenge aus der Mappingspezifikation.
Entfernen Sie die <EntityTypeMapping>-Tags für den "Customer"-Entitätstyp aus der Mappingspezifikation.
Verschieben Sie das <MappingFragment> für StoreEntitySet von "Customer" in das EntityType-Mapping für StoreEntitySet.
Die Mappingspezifikation sieht wie folgt aus.
<edmx:Mappings>
<Mapping Space="C-S"
xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">
<EntityContainerMapping StorageEntityContainer="Sales"
CdmEntityContainer="AdventureWorksEntities">
<EntitySetMapping Name="Store">
<EntityTypeMapping
TypeName="IsTypeOf(AdventureWorksModel.Store)">
<MappingFragment StoreEntitySet="Store">
<ScalarProperty Name="CustomerID"
ColumnName="CustomerID" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="SalesPersonID"
ColumnName="SalesPersonID" />
<ScalarProperty Name="Demographics"
ColumnName="Demographics" />
<ScalarProperty Name="rowguid"
ColumnName="rowguid" />
<ScalarProperty Name="ModifiedDate"
ColumnName="ModifiedDate" />
</MappingFragment>
<MappingFragment StoreEntitySet="Customer">
<ScalarProperty Name="CustomerID"
ColumnName="CustomerID" />
<ScalarProperty Name="TerritoryID"
ColumnName="TerritoryID" />
<ScalarProperty Name="AccountNumber"
ColumnName="AccountNumber" />
<ScalarProperty Name="CustomerType"
ColumnName="CustomerType" />
<ScalarProperty Name="Cust_rowguid"
ColumnName="rowguid" />
<ScalarProperty Name="Cust_ModifiedDate"
ColumnName="ModifiedDate" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>