NuGet мне нужно установить Microsoft.EntityFrameworkCore, если все, что мне нужно, это его провайдер? - PullRequest
0 голосов
/ 20 октября 2019

Я относительно новичок в NuGet. Я планирую использовать только базу данных sqlite в моем проекте. Используя диспетчер пакетов NuGet, я увидел, что есть несколько пакетов, связанных с Microsoft.EntityFrameworkCore.

Если использовать только sqlite, будет ли достаточно пакета Microsoft.EntityFrameworkCore.Sqlite или важно также установить пакет Microsoft.EntityFrameworkCore?

Я немного растерялся, когда мне следует установить Microsoft.EntityFrameworkCoreвместо Microsoft.EntityFrameworkCore.Sqlite и наоборот?

1 Ответ

1 голос
/ 23 октября 2019

Если вы ссылаетесь на пакет через 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 для предотвращения потока в родительский проект, какописано в документах .

Вы можете просмотреть все сборки, используемые вашим проектом, с помощью Solution Explorer из Visual Studio : 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 .

...