Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EF 5中多个域模型共享一个数据上下文_Entity Framework_Repository_Entity Framework 5_Dbcontext_Dbset - Fatal编程技术网

Entity framework EF 5中多个域模型共享一个数据上下文

Entity framework EF 5中多个域模型共享一个数据上下文,entity-framework,repository,entity-framework-5,dbcontext,dbset,Entity Framework,Repository,Entity Framework 5,Dbcontext,Dbset,最近,出于无知和缺乏时间,我将多个项目中的域模型(POCO实体类)合并到一个“DataModel”项目中,因为我不想在所有项目中重复专用的DBContext。让我印象深刻的是,可以做一些通用的事情,比如DbContext扩展,可以向其中添加来自各种客户机项目的DbSet实例 我读到过关于这类内容的文章,通常与作者在同一个圈子里争论——我完全同意——存储库功能完全由DbSet类完成 任何人都可以为构建一个可以存在于一个项目中的通用DbContext提供任何建议,其他项目都可以将其域模型(域实体集)

最近,出于无知和缺乏时间,我将多个项目中的域模型(POCO实体类)合并到一个“DataModel”项目中,因为我不想在所有项目中重复专用的DBContext。让我印象深刻的是,可以做一些通用的事情,比如DbContext扩展,可以向其中添加来自各种客户机项目的DbSet实例

我读到过关于这类内容的文章,通常与作者在同一个圈子里争论——我完全同意——存储库功能完全由DbSet类完成

任何人都可以为构建一个可以存在于一个项目中的通用DbContext提供任何建议,其他项目都可以将其域模型(域实体集)注册到共享DbContext中,在共享DbContext中分配它们自己的DbSet作为其存储库

构建可以存在于一个项目中的通用DbContext,其中其他项目都可以注册其域模型(域实体集)

这个主意很有趣,但我不确定你会从中得到什么

首先,您永远无法简单地键入
db.Customer
(或类似内容)。它应该始终是
genericdb.Set()
,不知道
genericdb
是否知道
Customer
。(可能尚未注册)

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

  • DbContext
    派生类中创建
    DbSet
    属性,并依赖于有关表名和列名、复数等的代码优先默认约定
  • 提供映射配置 第一个选项违背了泛型上下文类的目的,因此您必须为域中的每个类提供
    entitypeconfiguration
    s来注册域类,对于通常不需要的类也是如此。(顺便说一句,这应该在上下文的构造函数中完成。)

    进一步的含义是,在某个地方,您需要一个组件/服务,该组件/服务知道哪些类组属于一起,并且能够提供一致的配置列表。因此,你必须创建自己的组织者,而不是将专门的上下文作为开箱即用的组织原则

    但是回到起点。您不能创建一个包含DbContext工厂的DAL,该工厂为您的项目提供以前存在的上下文吗?您不必以这种方式复制专用的DbContext类