【问题标题】:NuGet do I need to install Microsoft.EntityFrameworkCore if all I need is its provider?NuGet 如果我只需要它的提供者,我是否需要安装 Microsoft.EntityFrameworkCore?
【发布时间】:2019-10-20 00:14:41
【问题描述】:

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

如果只使用 sqlite,Microsoft.EntityFrameworkCore.Sqlite 包就足够了,还是安装Microsoft.EntityFrameworkCore 包也很重要?

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

【问题讨论】:

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


【解决方案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 StudioSolution Explorer 查看项目使用的所有程序集:

或者通过 .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 功能。

【讨论】:

  • 即使不使用PackageReference,包管理器也会自动添加所有需要的依赖
猜你喜欢
  • 1970-01-01
  • 2011-06-12
  • 2022-09-23
  • 2021-11-25
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
相关资源
最近更新 更多