如何在不接触数据库的情况下在这两个实体之间创建关联? [英] How do I create an association between these 2 entities without touching the DB?
问题描述
我需要在这两个实体(1- *)之间创建一个虚拟" association
,以便可以使用linq
遍历它们,但是问题是我无法触摸数据库.我尝试过多次手动编辑edmx
却没有成功,但是遇到了各种映射错误.
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>
我到底需要做什么?
推荐答案
在edmx设计器中,您只需要右键单击并选择Add New >> Association.确保取消选中添加外键属性..."选项,然后选择所需的实体和导航属性名称.
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.
这篇关于如何在不接触数据库的情况下在这两个实体之间创建关联?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!