Подтвердить что ты не робот

Entity Framework 5 на .NET 4.0 - DatabaseGeneratedOption.Identity - undefined

Мне нужно использовать EF5 на .NET 4, и я столкнулся с проблемой ссылки при сопоставлении моего класса с HasDatabaseGenerationOption.Identity, которого нет в версии 4.0.

Не удается выполнить следующее:

this.Property(t => t.DeploymentLogId)
              .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

Кто-нибудь знает о работе?

4b9b3361

Ответ 1

Использование NuGet для добавления EntityFramework в проект, который нацелен на .NET 4.5, добавит EntityFramework 5.0.

Если позднее вы измените проект на целевой .NET 4.0, то по-прежнему ссылается на EntityFramework 5.0.

Чтобы исправить это, используйте NuGet для удаления EntityFramework и добавьте его обратно, также в NuGet. Это добавит EntityFramework 4.4, которая является последней поддерживаемой версией для .NET 4.0.

Если он все еще не работает, могут быть некоторые ссылки на конкретную версию EF в App.config. Они могут быть удалены.

Ответ 2

Пространство имен изменено в EF 5.0. Попробуйте добавить это:

using System.ComponentModel.DataAnnotations.Schema;

Ответ 3

Вы пытались использовать аннотацию данных?

public class DeploymentLog
{
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int DeploymentLogId { get; set; }

Ответ 4

System.ComponentModel.DataAnnotations.Schema был только частью .NET Framework с 4.5

Если вы используете 4.0, то Entity Framework предоставит его вам. Если вы посмотрите на исходный код DatabaseGeneratedOption и другие файлы, вы увидите, что их код завернут в условный

#if NET40
...
#endif

Ответ 5

У нас была эта проблема совсем недавно по старому проекту, и то, что мы сделали, было просто

  • удалить ссылку EntityFramework в проекте
  • щелкните правой кнопкой мыши по проекту, выполните управление пакетами NuGet, перейдите в категорию "Обновления" и нажмите "Обновить" на элементе "Структура сущностей", который был в списке до версии 6