加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – EF代码首先采用模块化设计

发布时间:2020-12-16 07:16:32 所属栏目:asp.Net 来源:网络整理
导读:首先使用ef4代码,您可以创建和编译类和dbcontext.当你想在模型集的已经编译的dll中添加一些类/表和关系时会发生什么? 到目前为止,我提出的解决方案是使用“部分”类,后面会称赞它们,第二个是编写一个全新的dbcontext,包括第一个以某种方式或扩展它,但这意味
首先使用ef4代码,您可以创建和编译类和dbcontext.当你想在模型集的已经编译的dll中添加一些类/表和关系时会发生什么?

到目前为止,我提出的解决方案是使用“部分”类,后面会称赞它们,第二个是编写一个全新的dbcontext,包括第一个以某种方式或扩展它,但这意味着额外的每个模块的db连接(每个db上下文).有关于此的任何想法?什么是最佳做法?此外,我需要能够使用迁移.

更明确地说,可能的情况如下:

A)您创建一个.dll,其中包含一些dbContextBase类和表(类).

B)您以自己的方式创建依赖/扩展dbContextBase的其他.dll *

C)您在项目中引用.dll并将其扩展.

所以基本上你可以有一个核心dbContext,然后添加一个菜单模块,然后你添加一个博客模块(但它可以通过菜单模块看到,以创建最新的博客文章菜单等).最重要的是,如果您想要一个特定的博客一次性功能,您可以快速集成它,但也可以保持您的博客模块可更新.

我希望看到它的最佳方法是使用每个模块的模型(等)的源代码Nuget包,而不是编译的dll.

解决方法

您可以在核心程序集中构建一些基础结构,这些基础结构将发现模块中的实体并将其注册到单个上下文.每个实体必须具有从EntityTypeConfiguration<>派生的类. (或复杂类型的ComplexTypeConfiguration<>)将描述映射.

一旦有了映射类,就可以使用一些模块接口为每个模块收集所有模块接口,或者使用反射来浏览程序集并创建映射类的实例.这些类可以直接由DbModelBuilder使用(在OnModelCreating中或直接使用).

Also I need to be able to work with migrations.

我不确定迁移是否已准备就绪,因为它有一些先决条件:

>所有共享表必须由核心程序集处理 – 它自己的DbMigration派生类(或新版本的类)
>每个模块必须处理自己的表 – 它自己的DbMigration派生类(或新版本的类)
>模块不得更改共享表
>模块不得更改或访问其他模块的表

这意味着您为核心设置了特殊迁移集,并为每个模块设置了一个迁移集.每个迁移集都在单独的程序集中定义 – 这可能是潜在的问题.我自己没有尝试过,所以我不知道EF迁移是否可以解决这个问题 – 我特别针对您真正需要模块化系统的场景,其中模块可以随着时间的推移添加或删除,因此您需要安装(Up方法)和卸载(向下方法).

迁移的问题在于,如果您开发平台,人们可以添加自己从未知道的自定义模块(如果它们不会破坏您的核心),那么您就不能这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读