错误:不保留通过映射的列的顺序 [英] Error: The order of the columns through the mappings is not preserved

查看:59
本文介绍了错误:不保留通过映射的列的顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,我正在努力使模型成为一个非常简单的示例数据库。该数据库包括4个表:Customers,Orders,Products和OrderItems(以多对多关系链接订单和产品)。 customers表包含客户的地址,在我的模型中我试图将其分成单独的实体。

所以我定义了一个名为Address的实体,其中包含映射到Customers中的地址字段的属性表,我在Customer和Address实体之间创建了1:1关联。这可以通过以下例外:

错误3021:从第168行开始的映射片段中的问题:表Customer中的以下每列都映射到多个概念侧属性:
Customers.CustomerID is映射到< CustomerAddress.Address。

CustomerID,CustomerAddress.Customer.CustomerID>

为了解决这个问题,我按照Noam的建议添加了ReferentialConstraint标签,如下所示: HTTP:// blogs.gotdotnet.com/adonet/archive/2008/12/05/table-splitting-mapping-multiple-entity-types-to-the-same-table.aspx


添加ReferentialConstraint后,我收到以下错误:

错误3019:映射片段中的问题从第176,211行开始:复合键列的映射不正确。从表Orders(CustomerID)到表Customers(CustomerID)的外键约束'FK_Orders_Customers':表Orders中的列(CustomerID)映射到CustomerOrder中的属性(CustomerID),表中的列(CustomerID)映射到属性(CustomerID)在CustomerAddress中。 不保留通过映射的列顺序

有人可以向我解释此错误的含义以及如何解决问题吗?
>
也许.edmx xml中的CSDL区域会有所帮助:


< edmx:ConceptualModels> 
< Schema Namespace =" OrdersModel"别名= QUOT;自"的xmlns = QUOT; HTTP://schemas.microsoft.com/ado/2006/04/edm">
< EntityContainer Name =" OrdersEntities">
< EntitySet Name =" CustomerSet"的EntityType = QUOT; OrdersModel.Customer" />
< EntitySet Name =" OrderSet"的EntityType = QUOT; OrdersModel.Order" />
< EntitySet Name =" ProductSet"的EntityType = QUOT; OrdersModel.Product" />
< AssociationSet Name =" CustomerOrder"协会= QUOT; OrdersModel.CustomerOrder">
< End Role =" Customer" EntitySet的= QUOT; CustomerSet" />
< End Role =" Order" EntitySet的= QUOT; OrderSet" />
< / AssociationSet>
< AssociationSet Name =" OrderProduct"协会= QUOT; OrdersModel.OrderProduct">
< End Role =" Order" EntitySet的= QUOT; OrderSet" />
< End Role =" Product" EntitySet的= QUOT; ProductSet" />
< / AssociationSet>
< EntitySet Name =" AddressSet"的EntityType = QUOT; OrdersModel.Address" />
< AssociationSet Name =" CustomerAddress"协会= QUOT; OrdersModel.CustomerAddress">
< End Role =" Customer" EntitySet的= QUOT; CustomerSet" />
< End Role =" Address" EntitySet的= QUOT; AddressSet" />
< / AssociationSet>
< / EntityContainer>
< EntityType Name =" Customer">
< Key>
< PropertyRef Name =" CustomerID" />
< / Key>
< Property Name =" CustomerID"类型="&的Int32 QUOT;可空= QUOT假QUOT; />
< Property Name =" Name"类型="字符串"可空= QUOT;真" />
< NavigationProperty Name =" Order"关系= QUOT; OrdersModel.CustomerOrder" FromRole = QUOT;客户" ToRole = QUOT;订单" />
< NavigationProperty Name =" Address"关系= QUOT; OrdersModel.CustomerAddress" FromRole = QUOT;客户" ToRole = QUOT;地址]按钮/>
< / EntityType>
< EntityType Name =" Order" >
< Key>
< PropertyRef Name =" OrderID" />
< / Key>
< Property Name =" OrderID"类型="&的Int32 QUOT;可空= QUOT假QUOT; />
< Property Name =" Date"类型=" DateTime的"可空= QUOT;真" />
< NavigationProperty Name =" Customer"关系= QUOT; OrdersModel.CustomerOrder" FromRole = QUOT;订单" ToRole = QUOT;客户" />
< NavigationProperty Name =" Products"关系= QUOT; OrdersModel.OrderProduct" FromRole = QUOT;订单" ToRole = QUOT;产品与QUOT; />
< / EntityType>
< EntityType Name =" Product" >
< Key>
< PropertyRef Name =" ProductID" />
< / Key>
< Property Name =" ProductID"类型="&的Int32 QUOT;可空= QUOT假QUOT; />
< Property Name =" Name"类型="字符串"可空= QUOT;真" />
< NavigationProperty Name =" Orders"关系= QUOT; OrdersModel.OrderProduct" FromRole = QUOT;产品与QUOT; ToRole = QUOT;订单" />
< / EntityType>
< Association Name =" CustomerOrder">
< End Type =" OrdersModel.Customer"角色= QUOT;客户"多重= QUOT 1 QUOT; />
< End Type =" OrdersModel.Order"角色= QUOT;订单"多重= QUOT * QUOT; />
< / Association>
< Association Name =" OrderProduct">
< End Type =" OrdersModel.Order"角色= QUOT;订单"多重= QUOT * QUOT; />
< End Type =" OrdersModel.Product"角色= QUOT;产品与QUOT;多重= QUOT * QUOT; />
< / Association>
< EntityType Name =" Address">
< Key>
< PropertyRef Name =" CustomerID" />
< / Key>
< Property Name =" CustomerID"类型="&的Int32 QUOT;可空= QUOT假QUOT; />
< Property Name =" StreetAddress"类型="字符串"可空= QUOT;真" />
< Property Name =" City"类型="字符串"可空= QUOT;真" />
< Property Name =" State"类型="字符串"可空= QUOT;真" />
< Property Name =" Zip"类型="字符串"可空= QUOT;真" />
< NavigationProperty Name =" Customer"关系= QUOT; OrdersModel.CustomerAddress" FromRole = QUOT;地址]按钮ToRole = QUOT;客户" />
< / EntityType>
< Association Name =" CustomerAddress">
< End Type =" OrdersModel.Customer"角色= QUOT;客户"多重= QUOT 1 QUOT; />
< End Type =" OrdersModel.Address"角色= QUOT;地址]按钮多重= QUOT 1 QUOT; />
< ReferentialConstraint>
< Principal Role =" Address">
< PropertyRef Name =" CustomerID" />
< / Principal>
< Dependent Role =" Customer">
< PropertyRef Name =" CustomerID" />
< / Dependent>
< / ReferentialConstraint>
< / Association>
< / Schema>
< / edmx:ConceptualModels>



解决方案

我建议采取另一条路来解决你的问题。如果Address是属于客户的对象,则可以使用Complex Type而不是构建对象。复杂类型是一种将一组实体属性封装在不是实体的结构中的方法。你可以在我写的帖子中阅读更多关于它们的信息:
http://blogs.microsoft.co.il/blogs/gilf/archive/2009/04/02/creating-complex-types-in-entity-framework.aspx


Hi all, I'm trying to make model an extremely simple sample database.  The database includes 4 tables: Customers, Orders, Products, and OrderItems (which links Orders and Products in a many-to-many relationship).  The customers table includes the customer's address, which in my model I am trying to separate out into a separate entity.

So I defined an Entity named Address, which contains properties mapped to the address fields in the Customers table, and I created a 1:1 association between the Customer and Address entities.  This through the following exception:

Error 3021: Problem in Mapping Fragment starting at line 168: Each of the following columns in table Customers is mapped to multiple conceptual side properties:
Customers.CustomerID is mapped to <CustomerAddress.Address.

CustomerID, CustomerAddress.Customer.CustomerID>


To fix this problem, I followed Noam's suggestions to add ReferentialConstraint tag, as outlined here:
http://blogs.gotdotnet.com/adonet/archive/2008/12/05/table-splitting-mapping-multiple-entity-types-to-the-same-table.aspx


After adding the ReferentialConstraint I get the following error:

Error 3019: Problem in Mapping Fragments starting at lines 176, 211: Incorrect mapping of composite key columns. Foreign key constraint 'FK_Orders_Customers' from table Orders (CustomerID) to table Customers (CustomerID): Columns (CustomerID) in table Orders are mapped to properties (CustomerID) in CustomerOrder and columns (CustomerID) in table Customers are mapped to properties (CustomerID) in CustomerAddress. The order of the columns through the mappings is not preserved .

Can someone explain to me what this error means and how to fix the problem?


Perhaps the CSDL area from the .edmx xml will be helpful:

<edmx:ConceptualModels>
      <Schema Namespace="OrdersModel" Alias="Self" xmlns="http://schemas.microsoft.com/ado/2006/04/edm">
        <EntityContainer Name="OrdersEntities">
          <EntitySet Name="CustomerSet" EntityType="OrdersModel.Customer" />
          <EntitySet Name="OrderSet" EntityType="OrdersModel.Order" />
          <EntitySet Name="ProductSet" EntityType="OrdersModel.Product" />
          <AssociationSet Name="CustomerOrder" Association="OrdersModel.CustomerOrder">
            <End Role="Customer" EntitySet="CustomerSet" />
            <End Role="Order" EntitySet="OrderSet" />
          </AssociationSet>
          <AssociationSet Name="OrderProduct" Association="OrdersModel.OrderProduct">
            <End Role="Order" EntitySet="OrderSet" />
            <End Role="Product" EntitySet="ProductSet" />
          </AssociationSet>
          <EntitySet Name="AddressSet" EntityType="OrdersModel.Address" />
          <AssociationSet Name="CustomerAddress" Association="OrdersModel.CustomerAddress">
            <End Role="Customer" EntitySet="CustomerSet" />
            <End Role="Address" EntitySet="AddressSet" />
          </AssociationSet>
        </EntityContainer>
        <EntityType Name="Customer">
          <Key>
            <PropertyRef Name="CustomerID" />
          </Key>
          <Property Name="CustomerID" Type="Int32" Nullable="false" />
          <Property Name="Name" Type="String" Nullable="true" />
          <NavigationProperty Name="Order" Relationship="OrdersModel.CustomerOrder" FromRole="Customer" ToRole="Order" />
          <NavigationProperty Name="Address" Relationship="OrdersModel.CustomerAddress" FromRole="Customer" ToRole="Address" />
        </EntityType>
        <EntityType Name="Order" >
          <Key>
            <PropertyRef Name="OrderID" />
          </Key>
          <Property Name="OrderID" Type="Int32" Nullable="false" />
          <Property Name="Date" Type="DateTime" Nullable="true" />
          <NavigationProperty Name="Customer" Relationship="OrdersModel.CustomerOrder" FromRole="Order" ToRole="Customer" />
          <NavigationProperty Name="Products" Relationship="OrdersModel.OrderProduct" FromRole="Order" ToRole="Product" />
        </EntityType>
        <EntityType Name="Product" >
          <Key>
            <PropertyRef Name="ProductID" />
          </Key>
          <Property Name="ProductID" Type="Int32" Nullable="false" />
          <Property Name="Name" Type="String" Nullable="true" />
          <NavigationProperty Name="Orders" Relationship="OrdersModel.OrderProduct" FromRole="Product" ToRole="Order" />
        </EntityType>
        <Association Name="CustomerOrder">
          <End Type="OrdersModel.Customer" Role="Customer" Multiplicity="1" />
          <End Type="OrdersModel.Order" Role="Order" Multiplicity="*" />
        </Association>
        <Association Name="OrderProduct">
          <End Type="OrdersModel.Order" Role="Order" Multiplicity="*" />
          <End Type="OrdersModel.Product" Role="Product" Multiplicity="*" />
        </Association>
        <EntityType Name="Address">
          <Key>
            <PropertyRef Name="CustomerID" />
          </Key>
          <Property Name="CustomerID" Type="Int32" Nullable="false" />
          <Property Name="StreetAddress" Type="String" Nullable="true" />
          <Property Name="City" Type="String" Nullable="true" />
          <Property Name="State" Type="String" Nullable="true" />
          <Property Name="Zip" Type="String" Nullable="true" />
          <NavigationProperty Name="Customer" Relationship="OrdersModel.CustomerAddress" FromRole="Address" ToRole="Customer" />
        </EntityType>
        <Association Name="CustomerAddress">
          <End Type="OrdersModel.Customer" Role="Customer" Multiplicity="1" />
          <End Type="OrdersModel.Address" Role="Address" Multiplicity="1" />
          <ReferentialConstraint>
            <Principal Role="Address">
              <PropertyRef Name="CustomerID" />
            </Principal>
            <Dependent Role="Customer">
              <PropertyRef Name="CustomerID" />
            </Dependent>
          </ReferentialConstraint>
        </Association>
      </Schema>
    </edmx:ConceptualModels>


解决方案

Hi,
I suggest to take another path to solve your problem. If the Address is an object that is part of the customer you can use a Complex Type instead of building an object. Complex Types are a way to encapsulate a set of entity’s properties inside a structure which isn’t an entity. You can read more about them in a post I wrote:
http://blogs.microsoft.co.il/blogs/gilf/archive/2009/04/02/creating-complex-types-in-entity-framework.aspx


这篇关于错误:不保留通过映射的列的顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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