有没有办法避免同一个数据库表的2个存储库对象?

时间:2012-05-29 07:56:47

标签: entity-framework entity-framework-4 repository

我目前在一个使用EF作为首选ORM的团队中工作。

我们有一个包含许多EDMX文件的常见项目。 这样做的原因是保持EDMX文件小而易于管理,同时还允许它们专注于数据库上的一组概念表。

例如

  • Orders.edmx
  • Users.edmx
  • Trades.edmx

这些都指向相同数据库上的一组不同的表。

我现在需要将用户表添加到Trade.edmx 文件中。由于用户表已经在user.edmx 文件中,因此在不同的命名空间下两次创建相同的用户类型,这意味着我需要2个UserRepository对象。

  • Common.data.trade.User
  • Common.data.users.User

有没有办法避免同一个表的2个存储库对象?

任何建议都将不胜感激

1 个答案:

答案 0 :(得分:1)

如果您正在使用POCO生成器,则可以更新Trades.edmx的模板,以便不生成新的User类及其上下文模板,以使用Users命名空间中的User类。 EF将POCO类与设计器中的实体仅通过类名(命名空间被省略)匹配,因此它可以工作。

缺点是你有两个映射文件中的User实体,你必须在两个文件中更新它,或者你的应用程序在运行时抛出异常。

这个问题的原因是你的架构 - 一开始你想要分离的模型,但知道你想要组合来自不同模型的实体。那些是矛盾的要求。使用单独的模型,其中Trade只知道没有任何导航属性的userID(如果它在另一个数据库中定义)或将所有实体移动到单个EDMX以支持您的新需求。