Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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的最佳方式是什么?_Entity Framework_Project Planning - Fatal编程技术网

Entity framework 我有三个共享同一数据库的项目,在所有项目中使用EF的最佳方式是什么?

Entity framework 我有三个共享同一数据库的项目,在所有项目中使用EF的最佳方式是什么?,entity-framework,project-planning,Entity Framework,Project Planning,我有三个项目(WCF项目,而不是客户端),我有一个数据库,现在我将如何使用EF?我是否应该创建第四个项目,其中包含db上下文和实体,然后在所有三个项目中添加对它的引用?或者我应该为每个项目创建一个单独的上下文,并为每个项目添加所需的表?有些桌子真的到处都用。那么什么是最好的解决方案呢 另一个问题:我是否应该在单独的项目中公开EFDB上下文,以便其他项目可以访问它?比如: MySeparateProject myPr = new MySeparateProject(); using (var

我有三个项目(WCF项目,而不是客户端),我有一个数据库,现在我将如何使用EF?我是否应该创建第四个项目,其中包含db上下文和实体,然后在所有三个项目中添加对它的引用?或者我应该为每个项目创建一个单独的上下文,并为每个项目添加所需的表?有些桌子真的到处都用。那么什么是最好的解决方案呢

另一个问题:我是否应该在单独的项目中公开EFDB上下文,以便其他项目可以访问它?比如:

 MySeparateProject myPr = new MySeparateProject();
 using (var db = new myPr.DBContext())
 {
     // do stuff with entities
     db.SaveChanges();
 }

我将创建一个单独的数据访问项目。无论如何,分离数据层是一种很好的做法。根据项目的性质和您想要测试它的方式,您可能想看看类似于存储库模式的东西(尽管关于它的EF值存在争议)


我认为最干净的方法是创建一个数据访问项目(类库),其中只包含模型和数据库上下文,并从所有其他项目中引用它们

有些人会说,您应该创建一个只包含模型的类库,然后创建另一个包含DbContext和repository类的类库,然后。。。。我觉得这对于大多数项目来说都是过分的。将模型和上下文放在一个地方,就可以很容易地在数据访问方面保持所有相关项目的一致同步

以下是我的典型项目结构:


这里,Squelch.Data包含了我所有的模型和数据库上下文,Squelch.Core包含了核心业务逻辑,我的两个“应用程序”(Squelch.PortaladCdrImport)和各种测试用例,都引用了这些基本类库。

实际上这是我脑海中的想法,EF和repository模式是一种双重工作……实际上,为了更好地进行调优,而不过度使用它(如果您首先使用数据库,那么在迁移时过度使用它),它将是一个包含contextes和实体模型的DAL,然后是一个供您的BLL使用的模型库一个应用层。数据访问解决方案可以工作吗?然后将其作为git子模块包含在中。