NuGet是否需要安装Microsoft.EntityFrameworkCore,如果我需要的只是它的提供者?

时间:2019-10-20 00:14:41

标签: c# .net-core nuget entity-framework-core nuget-package

我对NuGet比较陌生。我计划在我的项目中仅使用sqlite数据库。使用NuGet数据包管理器,我看到有几个与Microsoft.EntityFrameworkCore相关的软件包。

如果仅使用sqlite,Microsoft.EntityFrameworkCore.Sqlite软件包就足够了吗?或者安装Microsoft.EntityFrameworkCore软件包也很重要吗?

我有点困惑,什么时候应该安装Microsoft.EntityFrameworkCore而不是Microsoft.EntityFrameworkCore.Sqlite,反之亦然?

1 个答案:

答案 0 :(得分:1)

如果您通过 PackageReference 引用软件包,则也会自动获得其所有依赖项。

Microsoft.EntityFrameworkCore.Sqlite 3.0.0(针对 .NETStandard 2.1 )取决于Microsoft.EntityFrameworkCore.Sqlite.Core 3.0.0,取决于Microsoft.EntityFrameworkCore.Relational 3.0.0,最终取决于Microsoft.EntityFrameworkCore 3.0.0(现在取决于进一步取决于其他软件包。

所以 PackageReference

<Project>
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0" />
  </ItemGroup>
</Project>

不仅使您的项目获得顶层软件包,而且还获得所有传递性依赖关系作为依赖关系图-如果返回的那些项目的 PackageReferences 没有标有PrivateAssets来防止流向父项目的流程,如docs中所述。

您可以通过 Visual Studio Solution Explorer 查看项目使用的所有程序集: VisualStudio-SolutionExplorer

或通过 .NET Core CLI 键入: dotnet list package --include-transitive

Project 'Project' has the following package references
   [netcoreapp3.0]:
   Top-level Package                           Requested   Resolved
   > Microsoft.EntityFrameworkCore.Sqlite      3.0.0       3.0.0

   Transitive Package                                           Resolved
   > Microsoft.Data.Sqlite.Core                                 3.0.0
   > Microsoft.DotNet.PlatformAbstractions                      3.0.0
   > Microsoft.EntityFrameworkCore                              3.0.0
   > Microsoft.EntityFrameworkCore.Abstractions                 3.0.0
   > Microsoft.EntityFrameworkCore.Analyzers                    3.0.0
   > Microsoft.EntityFrameworkCore.Relational                   3.0.0
   > Microsoft.EntityFrameworkCore.Sqlite.Core                  3.0.0
   > Microsoft.Extensions.Caching.Abstractions                  3.0.0
   > Microsoft.Extensions.Caching.Memory                        3.0.0
   > Microsoft.Extensions.Configuration                         3.0.0
   > Microsoft.Extensions.Configuration.Abstractions            3.0.0
   > Microsoft.Extensions.Configuration.Binder                  3.0.0
   > Microsoft.Extensions.DependencyInjection                   3.0.0
   > Microsoft.Extensions.DependencyInjection.Abstractions      3.0.0
   > Microsoft.Extensions.DependencyModel                       3.0.0
   > Microsoft.Extensions.Logging                               3.0.0
   > Microsoft.Extensions.Logging.Abstractions                  3.0.0
   > Microsoft.Extensions.Options                               3.0.0
   > Microsoft.Extensions.Primitives                            3.0.0
   > SQLitePCLRaw.bundle_e_sqlite3                              2.0.0
   > SQLitePCLRaw.core                                          2.0.0
   > SQLitePCLRaw.lib.e_sqlite3                                 2.0.0
   > SQLitePCLRaw.provider.dynamic_cdecl                        2.0.0
   > System.Collections.Immutable                               1.6.0
   > System.ComponentModel.Annotations                          4.6.0
   > System.Diagnostics.DiagnosticSource                        4.6.0
   > System.Memory                                              4.5.3
   > System.Text.Json                                           4.6.0
   > System.Threading.Tasks.Extensions                          4.5.2

要回答第二个问题:您可能只想为数据库提供程序不可知类库安装Microsoft.EntityFrameworkCore,提供常规的 Entity Framework Core 功能。