我的应用程序有一个底层模型,我使用实体框架 DbContext 进行数据访问。除了基本应用程序之外,还有动态加载的模块,每个模块都由一个程序集表示,并在运行时由主应用程序加载(所有要加载的模块都在配置文件中进行配置)。模块可以进一步相互依赖,例如 ModC 需要加载 ModA 和 ModB。
模块为基础应用程序提供额外的视图和服务(即扩展基础应用程序)。大多数时候,他们会向基础应用程序添加额外的用例。
关于 DbContext 的实际问题:模块扩展数据库中的表数量或扩展现有表(通过从基本模型类继承)。
a) 有没有办法为模块提供统一的 DbContext 而无需在其 DbContext 中重写所有 DbSet<...>s?从基础应用程序的 DbContext 继承不起作用,因为模块可以依赖于多个其他模块,并且 C# 不支持多重继承。
b) 如何正确运行 Entity Framework 数据库迁移以正确配合加载模块中的所有迁移脚本?更准确地说:模块只允许添加/扩展现有的数据库结构,因此迁移应该在第一次加载模块时发生,一旦模块被卸载,更改不应该被删除,但是,如果模块被更新,数据库应该在下次加载模块时迁移。
希望有任何模式或想法可以在 C# / Entity Framework 中实现这样的场景。
编辑:在视图方面,它与 MVC 的可插入区域相比很容易实现: 动态扩展应用程序的功能? 我希望数据层也有类似的东西。