asp.net-mvc – EF代码首先采用模块化设计
首先使用ef4代码,您可以创建和编译类和dbcontext.当你想在模型集的已经编译的dll中添加一些类/表和关系时会发生什么?
到目前为止,我提出的解决方案是使用“部分”类,后面会称赞它们,第二个是编写一个全新的dbcontext,包括第一个以某种方式或扩展它,但这意味着额外的每个模块的db连接(每个db上下文).有关于此的任何想法?什么是最佳做法?此外,我需要能够使用迁移. 更明确地说,可能的情况如下: A)您创建一个.dll,其中包含一些dbContextBase类和表(类). B)您以自己的方式创建依赖/扩展dbContextBase的其他.dll * C)您在项目中引用.dll并将其扩展. 所以基本上你可以有一个核心dbContext,然后添加一个菜单模块,然后你添加一个博客模块(但它可以通过菜单模块看到,以创建最新的博客文章菜单等).最重要的是,如果您想要一个特定的博客一次性功能,您可以快速集成它,但也可以保持您的博客模块可更新. 我希望看到它的最佳方法是使用每个模块的模型(等)的源代码Nuget包,而不是编译的dll. 解决方法
您可以在核心程序集中构建一些基础结构,这些基础结构将发现模块中的实体并将其注册到单个上下文.每个实体必须具有从EntityTypeConfiguration<>派生的类. (或复杂类型的ComplexTypeConfiguration<>)将描述映射.
一旦有了映射类,就可以使用一些模块接口为每个模块收集所有模块接口,或者使用反射来浏览程序集并创建映射类的实例.这些类可以直接由DbModelBuilder使用(在OnModelCreating中或直接使用).
我不确定迁移是否已准备就绪,因为它有一些先决条件: >所有共享表必须由核心程序集处理 – 它自己的DbMigration派生类(或新版本的类) 这意味着您为核心设置了特殊迁移集,并为每个模块设置了一个迁移集.每个迁移集都在单独的程序集中定义 – 这可能是潜在的问题.我自己没有尝试过,所以我不知道EF迁移是否可以解决这个问题 – 我特别针对您真正需要模块化系统的场景,其中模块可以随着时间的推移添加或删除,因此您需要安装(Up方法)和卸载(向下方法). 迁移的问题在于,如果您开发平台,人们可以添加自己从未知道的自定义模块(如果它们不会破坏您的核心),那么您就不能这样做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何在MVC控制器中使用消息框?
- asp.net – httpCookies requireSSL在http上设置为true不会
- asp.net – 如何在Ember.js应用程序中使用ASP .NET Web API
- asp.net – 编辑条目时的实体框架DateTime格式
- asp.net-mvc – 多租户Razor页面
- asp.net-mvc – 使用ASP.NET Core和MVC存储本地文件
- asp.net – MVC 4从资源设置属性值
- asp.net-mvc – 注册到global.asax的路由的替代位置
- asp.net-mvc – MVC中的错误处理
- asp.net-mvc – 将索引设置为控制器的默认路由