17

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

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

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

2 回答 2

22

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

有人会说你应该只用模型创建一个类库,然后再创建一个具有 DbContext 和存储库类的类库,然后......我觉得这对于大多数项目来说是多余的。将模型和上下文放在一个地方可以很容易地在数据访问方面保持所有相关项目的一致同步。

这是我的典型项目结构:

在此处输入图像描述

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

于 2013-06-15T01:10:33.727 回答
3

我会创建一个单独的数据访问项目。无论如何,将数据层分开是一种很好的做法。根据项目的性质以及您希望如何对其进行测试,您可能需要查看类似存储库模式的内容(尽管存在关于其在 EF 中的价值的争论)。

http://msdn.microsoft.com/en-us/library/ff649690.aspx

于 2013-06-14T23:54:16.723 回答