2

我最近出于无知和缺乏时间,从几个项目进入一个“DataModel的”项目合并域模型(POCO实体类),因为我不想重复所有项目的专用DbContext。它让我觉得理想的是可以完成一些通用操作,比如DbContext扩展,可以从其中添加来自各种客户端项目的DbSet实例。许多领域模型中的EF共享一个数据上下文5

我看过这样的事情提到,通常在同一个圈子为抗衡的作者 - 我完全同意 - 该库功能是由DbSet类实现completey。

任何人都可以提供任何建议,建立一个通用的DbContext,可以存在于一个项目中,其他项目都可以有共享的DbContext注册的领域模型(域实体集),在那里他们都分配给他们自己的DbSet充当他们的存储库?

回答

0

建设可以在一个项目中,其他项目都可以有自己的域模型(套域实体)注册

有趣的想法存在一个通用的DbContext,但我不知道你是什么会因此而获益。

原因之一,你永远无法简单地输入db.Customer(或类似)。应始终为genericdb.Set<Customer>(),不知道genericdb是否完全知道Customer。 (它可能没有被注册)。

那么,这个注册应该如何进行?有两种方法可以让一个上下文类映射到数据库模型:

  1. DbContext派生类创建DbSet财产和依靠有关表和列名代码优先默认约定,多元化等。
  2. 提供映射配置。

第一个选项击败通用上下文类的目的,所以你必须通过在域提供EntityTypeConfiguration<T> S代表每个类注册域类,也通常可以做无类。 (顺便说一下,这应该在上下文的构造函数中完成。)

更深层次的含义是某个地方你需要一个组件/服务来知道哪些类组合在一起并能够传递一个一致的列表的配置。因此,您不必将专用环境作为开箱即用的组织原则,而必须创建自己的组织者。

但是回到开始。难道你不能创建一个DAL,它包含一个DbContext工厂,它提供了他们以前为你的项目存在的上下文吗?您不必以这种方式复制专用的DbContext类。