EF代码优先:将实体(一个多个)映射到同一个表

时间:2011-05-20 11:31:41

标签: entity-framework mapping ef-code-first entity-framework-4.1

假设我在业务层中有 Customer,Order,OrderDetail 类(这是我的问题的简化版本)。

我还有一个(现有)数据库,它有一个全局表,其中表的每一行都包含Customers-Orders-OrderDetails的信息;例如:

CustomerID,CompanyName,Fax,OrderID,OrderDate,ProductID,UnitPrice,Quantity

(以这种方式,客户在不同的行中有重复的信息)。

将来我会有一个新数据库(使用不同的表Customers,Orders,OrderDetails),我想使用相同的程序。

我想使用 EF CodeFirst 映射到旧数据库,以及将来使用新数据库

哪种解决方案最好?

  1. 使用全局类设计包含Customers-Orders-OrderDetails信息的业务层。所以这个类的映射 使用EF4在数据层中使用旧数据库是微不足道的。 将来,我将修改新数据库的业务层和数据层。

  2. 使用Customers,Orders,OrderDetails类设计业务层。在这种情况下,是否可以映射这些类到旧数据库的全局表?怎么样 ? (问题是客户订单是一对多)。 将来我只会修改用于映射新数据库的数据层。

1 个答案:

答案 0 :(得分:0)

  1. 这将暂时有用,之后您将不得不修改使用全局类的所有内容 - 这可能需要做很多工作。
  2. 无法将一个表映射到三个实体,其中两个实体与EF之间具有一对多关系。
  3. 使用第三种方法。如第一种方法中所述加载一个类,但立即将结果转换为第二种方法中的三个类。如果持续更改,将执行相反的操作。将此代码包装在一个地方 - 存储库。您的应用程序将使用三个类,它将不知道它们的持久方式。更改数据库后,您只会从存储库中删除其他转换,并直接使用EF加载和保存的Customer,Order,OrderDetail。