问题
I need to create a "virtual" association
between these two entities (1-*) so that I can traverse them using linq
, but the problem is I cannot touch the database. I have tried to manually edit the edmx
many times without success, getting various mapping errors.
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="DataAccess.SD.Store" Alias="Self" Provider="Devart.Data.Oracle" ProviderManifestToken="ORA" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
<EntityContainer Name="SDModelsStoreContainer">
<EntitySet Name="CUSTOMER" EntityType="DataAccess.SD.Store.CUSTOMER" store:Type="Tables" Schema="PINNACLE" />
<EntitySet Name="EQUIPMENT" EntityType="DataAccess.SD.Store.EQUIPMENT" store:Type="Tables" Schema="PINNACLE" />
</EntityContainer>
<EntityType Name="CUSTOMER">
<Key>
<PropertyRef Name="CUSTOMEROID" />
</Key>
<Property Name="CUSTOMEROID" Type="int64" Nullable="false" />
<Property Name="CUSTOMER_NAME" Type="VARCHAR2" MaxLength="40" />
<Property Name="CUSTOMER_ACCOUNT" Type="VARCHAR2" MaxLength="20" />
</EntityType>
<EntityType Name="EQUIPMENT">
<Key>
<PropertyRef Name="EQUIPMENTOID" />
</Key>
<Property Name="EQUIPMENTOID" Type="int64" Nullable="false" />
<Property Name="OWNER_ID" Type="VARCHAR2" Nullable="false" MaxLength="30" />
<Property Name="EQUIPMENT_ID" Type="VARCHAR2" MaxLength="100" />
</EntityType>
</Schema></edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema Namespace="DataAccess.SD" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityContainer Name="SDContext" annotation:LazyLoadingEnabled="true">
<EntitySet Name="Customers" EntityType="DataAccess.SD.Customer" />
<EntitySet Name="Trailers" EntityType="DataAccess.SD.Trailer" />
</EntityContainer>
<EntityType Name="Customer">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Name="Id" Type="Int64" Nullable="false" />
<Property Name="Name" Type="String" MaxLength="40" Unicode="false" FixedLength="false" />
<Property Name="AccNo" Type="String" MaxLength="20" Unicode="false" FixedLength="false" />
</EntityType>
<EntityType Name="Trailer">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int64" Name="Id" Nullable="false" />
<Property Type="String" Name="Number" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Type="String" Name="Customer_Id" Nullable="false" MaxLength="30" FixedLength="false" Unicode="false" />
</EntityType>
</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="SDModelsStoreContainer" CdmEntityContainer="SDContext">
<EntitySetMapping Name="Customers">
<EntityTypeMapping TypeName="DataAccess.SD.Customer">
<MappingFragment StoreEntitySet="CUSTOMER">
<ScalarProperty Name="Id" ColumnName="CUSTOMEROID" />
<ScalarProperty Name="Name" ColumnName="CUSTOMER_NAME" />
<ScalarProperty Name="AccNo" ColumnName="CUSTOMER_ACCOUNT" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="Trailers">
<EntityTypeMapping TypeName="DataAccess.SD.Trailer">
<MappingFragment StoreEntitySet="EQUIPMENT">
<ScalarProperty Name="Number" ColumnName="EQUIPMENT_ID" />
<ScalarProperty Name="Customer_Id" ColumnName="OWNER_ID" />
<ScalarProperty Name="Id" ColumnName="EQUIPMENTOID" />
</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="SD" ZoomLevel="100">
<EntityTypeShape EntityType="DataAccess.SD.Customer" Width="1.75" PointX="0.75" PointY="0.75" Height="1.59568359375" IsExpanded="true" />
<EntityTypeShape EntityType="DataAccess.SD.Trailer" Width="1.75" PointX="3.125" PointY="0.75" Height="1.59568359375" />
<AssociationConnector Association="DataAccess.SD.CustomerTrailer">
<ConnectorPoint PointX="2.5" PointY="1.7064925130208335" />
<ConnectorPoint PointX="4" PointY="1.7064925130208335" />
</AssociationConnector>
<AssociationConnector Association="DataAccess.SD.CustomerTrailer">
<ConnectorPoint PointX="2.5" PointY="1.6439925130208335" />
<ConnectorPoint PointX="3.125" PointY="1.6439925130208335" />
</AssociationConnector>
</Diagram>
</Diagrams>
</Designer>
</edmx:Edmx>
What do I need to do exactly?
回答1:
In the edmx designer you just need need to right click and choose Add New >> Association. Make sure you untick the "Add foreign key properties..." option, and select your required entities and navigation property names.
Then select the association and in the properties pane click into the "Referential Constraint" option - here you can set up which fields are involve in the association. You'll also want to set the correct multiplicity in the properties pane.
来源:https://stackoverflow.com/questions/14733088/how-do-i-create-an-association-between-these-2-entities-without-touching-the-db