【发布时间】:2015-02-26 08:34:35
【问题描述】:
EF 的设计迫使开发者继承 DbContext 类。一些可重用的库(例如 ASP.NET Identity)通常使用相同的继承路径提供其功能,即通过提供 IdentityDbContext 基类。
但是如果你有 2 个这样的库,这显然是行不通的,例如要求您同时从 IdentityDbContext 和 CmsDbContext 继承,这在 .NET 上显然是不可能的。我想要的结果是有一个 application-dbcontext 包含来自我的身份模块和我的 cms 模块的模型(我将无法将其分离为 2 个 dbcontexts,因为这意味着我最终将获得多个连接和交易,并且我的模型只能引用身份或 cms 实体,但不能同时引用两者)。
很难相信这个问题似乎没有在 EF 社区中被问到,但这似乎是一个非常糟糕的 ORM 设计。继承只允许您进行严格的线性模块化。 (作为比较,在 NHibernate 中,ISession 和您的配置是 2 个独立的东西,因此您可以使用发现过程从不同的不相关模块构建映射配置,而不会弄乱我的 ISession 以及我的数据库连接/事务)。
所以问题是,假设您是一个模块的开发人员,想要将模型注册到实体框架(类似于 ASP.NET 标识模块)中,您不希望有一个基础 DbContext使用应用程序必须继承,因为它会阻止它们使用其他模块(例如 ASP.NET 身份的 IdentityDbContext)。那么我的选择是什么? 有什么方法可以将模型注册到 DbContext 类中而不需要从 DbContext 继承?覆盖 OnModelCreating 是访问 ModelBuilder 的唯一方法吗?
【问题讨论】:
标签: entity-framework