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

entity-framework – 如何使用Entity Framework Code First和DDD

发布时间:2020-12-13 20:44:20 所属栏目:百科 来源:网络整理
导读:要使用实体框架实现域驱动设计,我使用Julie Lerman在TechEd North America 2013( http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/DEV-B336#fbid=4tnuPF6L-Jc)上提出的方法.此方法使用EF实体类作为域类.对于不同的有界上下文,域实体类具有不同的
要使用实体框架实现域驱动设计,我使用Julie Lerman在TechEd North America 2013( http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/DEV-B336#fbid=4tnuPF6L-Jc)上提出的方法.此方法使用EF实体类作为域类.对于不同的有界上下文,域实体类具有不同的属性,甚至可以有不同的名称,尽管它们将数据存储在同一个表中.示例是“客户服务”有界上下文中的客户,实际上是“客户”,但在“发货”有界上下文中,他是仅具有客户属性子集的“收件人”.对于每个有界上下文,存在不同的EF上下文,其仅包括有界上下文所需的实体的DbSet.通过重写OnModelCreating,我们甚至可以排除与有界上下文无关的引用实体.使用POCO可以很容易地实现这一部分.

问题是使用Code First时的数据库创建.如果我们让Code First为每个不同的EF上下文创建数据库,我们最终会得到几个数据库.如果我们在EF上下文的构造函数中定义数据库名称,则使用第一个使用的EF上下文创建数据库,并在使用第二个EF上下文时丢失InvalidOperationException(说模型已更改)(缺少实体,缺少属性等).如果使用的EF上下文在使用之前使用其他EF上下文的实体/成员,我们可能会使用迁移来更新数据库.但是,这肯定会与正常使用迁移相混淆,并且无法正常运行.
作为临时解决方案,我仅使用单独的EF上下文来创建数据库.这意味着我必须再次为此目的实现所有EF实体.另一个问题是我必须在应用程序启动时创建此EF上下文的实例,以确保创建数据库并(如果需要)迁移.

我相信还有其他解决方案.所以,请(朱莉?)告诉我们如何.

本质上,我相信您必须拥有一个主要上下文,其中定义了所有“表”并且还驱动迁移.此上下文是用于创建数据库的内容.

所有后续的“有界”上下文在其构造函数中都有Database.SetInitializer(null),以防止它们篡改数据库模式.

此外,主上下文和“有界”上下文都应该从具有连接字符串和此类集的抽象基本上下文类继承.

当应用程序启动时,您可以简单地尝试实例化主上下文并确保它已迁移到最新版本.但是在稍后的实际应用程序中,您只使用仅限实现主上下文子集的“有界”上下文.

我意识到你已经在部分或整体中做了一些,但我认为这是要走的路.

(编辑:李大同)

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

    推荐文章
      热点阅读