我有三个项目(WCF项目,而不是客户端),我有一个数据库,现在我将如何使用EF?我应该创建第四个项目,它将具有db上下文和实体,然后在所有三个项目中添加对它的引用?或者我应该为每个项目设置一个单独的上下文,只需添加每个项目所需的表格?有些桌子到处都是用的。那么什么是最好的解决方案?
另一个问题:我应该在单独的项目中公开EF db上下文,以便其他项目可以访问它吗?类似的东西:
MySeparateProject myPr = new MySeparateProject();
using (var db = new myPr.DBContext())
{
// do stuff with entities
db.SaveChanges();
}
答案 0 :(得分:18)
我认为最干净的事情是创建一个只包含模型和数据库上下文的数据访问项目(类库),并从所有其他项目中引用它。
有些人会说你应该只使用模型创建一个类库,然后再创建一个具有DbContext的类库,并拥有存储库类,然后....我觉得这对于大多数人来说都是过度的项目。将模型和上下文放在一个地方只是让所有依赖项目在数据访问时始终保持同步非常容易。
这是我的典型项目结构:
此处, Squelch.Data 包含我的所有模型和数据库上下文, Squelch.Core 包含核心业务逻辑,以及我的两个“应用程序”( Squelch .Portal ad CdrImport ),以及各种测试用例,都引用这些基类库。
答案 1 :(得分:3)
我会创建一个单独的数据访问项目。无论如何,最好将数据层分开。根据项目的性质以及您希望如何测试它,您可能需要查看类似于存储库模式的内容(尽管有关EF的价值的争论)。