为什么使用System.Data.Entity仅需要引用Entity Framework?

时间:2018-11-10 08:11:41

标签: c# .net entity-framework namespaces

我注意到,通过安装Entity Framework NuGet包,三个引用被添加到了项目中:

  • EntityFramework
  • EntityFramework.SqlServer
  • System.ComponentModel.DataAnnotations

然后,我可以使用System.Data.Entity而不在项目中引用它。这怎么可能?我该如何在自己的作品中实现它?

顺便说一句,我还查看了Microsoft提供的源代码,并确保程序集名称也为System.Data.Entity

System.Data.Entity.csproj

1 个答案:

答案 0 :(得分:1)

  

我可以使用System.Data.Entity而不在项目中引用它。这怎么可能?

System.Data.Entity是一个命名空间。

EntityFramework.dll包含许多属于System.Data.Entity命名空间的类型。 EG DbContext。

DbContext Class

  

命名空间:System.Data.Entity

     

程序集:EntityFramework(在   EntityFramework.dll)

.NET Framework中有一个名为System.Data.Entity.dll的程序集,但EF不再使用它。 EF最初是.NET Framework本身的一部分,但现在通过NuGet交付。 .NET Framework的 still 部分仍旧支持EF的较早版本,因为使用较旧EF的较旧应用程序仍需要它。参见:

  

在早期版本的EF中,代码在核心库之间划分   (主要是System.Data.Entity.dll)作为.NET的一部分提供   框架和带外(OOB)库(主要是   NuGet包中附带的EntityFramework.dll)。 EF6接受代码   从核心库中提取出来,并将其合并到OOB库中。   为了使EF开源并为   它能够以与.NET Framework不同的速度发展。的   这样的结果是需要重新构建应用程序   针对已移动的类型。

Upgrading to Entity Framework 6