Можно ли использовать Entity Framework 6.3.0 в библиотеке классов .NET Standard 2.0? - PullRequest
0 голосов
/ 30 октября 2019

Можно ли использовать Entity Framework 6.3.0 в библиотеке классов .NET Standard 2.0?

В Dependencies -> Packages У меня есть ссылка на Entity Framework 6.3.0

И яиметь такой код:

using System.Data.Entity;

public partial class AlertContext : DbContext

Но я получаю следующие ошибки:

Тип или имя пространства имен 'Entity' не существует в пространстве имен 'System.Data' (вам не хватает ссылки на сборку?)

Не удалось найти тип или имя пространства имен 'DbContext' (отсутствует директива using или ссылка на сборку?)

1 Ответ

3 голосов
/ 05 ноября 2019

6.3.0 была первой версией Entity Framework 6, предназначенной для .NET Standard;он нацелен на .NET Standard 2.1 вместе с .NET 4.0 и .NET 4.5, как видно из в его списке Nuget . 6.2.0 предназначен только для .NET.

Обратите внимание, что .NET Standard 2.0 по-прежнему не допустимая цель.

В зависимости от вашего сценария,вы могли бы иметь возможность обойтись с многоцелевым нацеливанием вашей библиотеки на .NET (в моем примере ниже .NET 4.7.2) и .NET Standard 2.1:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>   
    <TargetFrameworks>net472;netstandard2.1</TargetFrameworks>
  </PropertyGroup>
</Project>

это реально зависит от 2 факторов:

  • Ваши другие ссылки. Комбинация, которую я предлагаю выше, подойдет в большинстве случаев, поскольку .NET 4.7.2 и .NET Standard 2.1 могут ссылаться на пакеты .NET Standard 2.0, которые охватывают большинство, но далеко не все современные пакеты.

  • Фреймворки, из которых вы хотите использовать вашу библиотеку. Цель .NET означает, конечно, что библиотека может использоваться проектами .NET Framework той же версии .NET или выше. Цель .NET Standard 2.1 позволяет использовать библиотеку в проектах, ориентированных на .NET Standard 2.1, .NET Core 3.0, Mono 6.4 и более поздние версии, а также на последние версии Xamarin. Заметным упущением являются версии .NET Core до версии 3.0. EF6 не доступен для .NET Core 1 или 2. Полный список см. В таблице поддержки .NET Standard .NET для полного списка.

* Я использовал .NET 4.7.2 для иллюстрации, потому что .NET 4.6.1 официально поддерживает .NET Standard 2.0, но Microsoft рекомендует использовать 4.7.2 или выше. См. мой ответ здесь для получения дополнительной информации.

...