如何在不接触数据库的情况下在这两个实体之间创建关联? [英] How do I create an association between these 2 entities without touching the DB?

查看:90
本文介绍了如何在不接触数据库的情况下在这两个实体之间创建关联?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在这两个实体(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屋!

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