0

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

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

例如

  • 订单.edmx
  • 用户.edmx
  • 交易.edmx

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

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

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

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

任何建议将不胜感激

4

1 回答 1

1

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

缺点是您在两个映射文件中有用户实体,您必须在两个文件中更新它,否则您的应用程序会在运行时抛出异常。

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

于 2012-05-29T08:18:33.317 回答