我应该将Entity Framework包含在我的类库中还是直接放入应用程序中?

3
你可能遇到过这种问题,但在我的情况下,它有点不同,我找不到可行的答案(可能已经存在,但我找不到)。我正在开发一个业务应用程序,将整个功能拆分为多个类库。我使用Entity Framework,但我不确定在哪里包含它才是正确的?在我的情况下,我有这些库:
- Project.Library.Core - Project.Library.Models(包含实体数据模型和实体)。 - Project.Library.Auth(包含身份验证相关和用户管理类)。 - 还有一些频繁使用实体和数据库上下文的类。
为了让这个工作,我必须单独在每个库中安装Entity Framework。最终,它们将被包含在多个ASP.NET MVC Web应用程序中。我本来可以直接将Entity Framework安装到Web应用程序中,但是这个应用程序将来会有移动应用程序以及可能的Windows Store应用程序。在这种情况下,我可以简单地设置一个ASP.NET Web API,并使用现有的类库生成所需的数据。这是唯一阻止我将Entity Framework直接合并到Web应用程序中的因素。
那么你对此有什么看法?单独在每个库中包含Entity Framework(需要正常运行),还是只在Web应用程序中包含并稍后按照相同的方法处理Web API?
谢谢。
1个回答

2
您只需要将EntityFramework“安装”到一个地方:Project.Library.Models。假设您的DTO是标准的代码优先对象,则只要使用数据访问层包装上下文对象,就不需要在任何其他地方直接引用它。
添加对该程序集的引用将导致必需的DLL随应用程序、网站等一起包含。请注意,如果您正在使用EntityFramework.SqlServer,则Visual Studio无法检测到瞬态依赖项,因此您需要执行类似以下操作的操作:
class Include
{
    private Include() { }
    private SqlProviderServices IncludeSql;
}

在模型项目的某个地方,以便DLL也被复制过去。


@HumzaKhan 你可以尝试将你的DBContext包装在一个数据访问层中(只是一个公开所有你想要对数据库进行的操作的对象)。 - BradleyDotNET
@BradleyDotNET,这是标准做法吗?我按照你说的为实体框架创建了单独的类库,但每次我更改主项目并编译解决方案时,类库也会被编译。 - AminM
1
@AminM 我不会说这是一种“标准”方式,但肯定是常见的一种方式(如果你想在多个项目之间共享模型,则必须这么做)。至于重新编译,你要么点击“重新构建”而非“构建”,要么你的更改被检测到影响了“Models”项目(可能是模型引用了你的主要项目,或者一个公共库发生了变化,或者你没有改变你认为你改变了的东西)。 - BradleyDotNET
@HumzaKhan 你为什么取消了我的答案? - BradleyDotNET
@HumzaKhan 没问题;只是确认一下 :) - BradleyDotNET
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接