2016-01-22 51 views
0

我一直在试图找出EntityFramework.CoreEntityFramework.MicrosoftSqlServer之间的区别,找出我需要哪一个软件包。我直到今天才注意到,在我的Visual Studio解决方案中,它同时具有WebUI项目和DataAccess项目,WebUI仅包含EntityFramework.MicrosoftSqlServer,而DataAccess项目仅包含EntityFramework.Core我需要哪一个? EntityFramework.Core或EntityFramewor.MicrosoftSqlServer?

这两者之间的真正区别是什么,什么时候应该包括一个和另一个?我正在为整个解决方案使用ASP.Net 5 Core。

回答

2

EntityFramework.MicrosoftSqlServer取决于EntityFramework.Relational而后者取决于EntityFramework.Core。恢复项目是关于创建依赖关系图并将所有必需的包(不管它们是否在project.json中指定)安装到项目中。 在你的情况下,你指定的只是EntityFramework.MicrosoftSqlServer,但在还原过程中,其他依赖项(包括EntityFramework.Core)将被取消,因此不需要明确指定EntityFramework.Core。

如果您使用dnx,则可以使用dnu list(您可以使用--details标志查看更多详细信息)来查看依赖关系图,或者,如果您很勇敢,则可以查看project.lock.json文件。

+0

它有什么优势仅指定一个与都? – Matthew

+0

如果您决定将'EntityFramework.MicrosoftSqlServer'依赖项移动到另一个项目,或者他们决定从'EntityFramework.MicrosoftSqlServer'中删除'EntityFramework.Core'依赖项,那么它们将不会继续编译。除此之外没有优势 –

+0

我不会添加隐式依赖关系。这是更多的事情来维护和 - 与贝塔斯一样 - 你可能最终会因为重命名或版本不匹配而出现一些奇怪的问题。此外,请注意,您已经没有指定所有隐式依赖关系 - 您必须将十个(如果不是数百)包引用添加到您的project.json中。 – Pawel

1

两者都是必需的,但如果您添加EntityFramework.MicrosoftSqlServer,那么将为您添加EntityFramework.Core,因为这是EntityFramework.MicrosoftSqlServer的要求。

EntityFramework.Core包含所有的EntityFramework如DbContextDbSet的核心代码和任何IQueryable extensions藏汉作为很多的其它内部代码。

EntityFramework.MicrosoftSqlServer包含数据库特定的sql语法和sql server的连接代码。还有其他数据库提供者可用。

可用的数据库供应商:

  • EntityFramework.InMemory(这是好是不需要数据库编写测试)
  • EntityFramework.Sqlite
  • EntityFramework.MicrosoftSqlServer