Entity Framework 5 в .NET 4.0 — DatabaseGeneratedOption.Identity не определен

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

Не получается следующее:

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

Кто-нибудь знает обходной путь?


person Hotrodmonkey    schedule 29.08.2012    source источник
comment
Каково точное сообщение об ошибке?   -  person jrummell    schedule 29.08.2012


Ответы (5)


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

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

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

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

person Thomsen    schedule 26.09.2012
comment
Это сделало это - у меня не был установлен EF 5. Введите Install-Package EntityFramework -Pre в личку. - person Cody; 13.03.2013
comment
Примечание. Мне пришлось удалить EF для .NET 4.5 из всех проектов в моем решении, прежде чем читать его, чтобы заставить его работать с .NET 4.0. - person trakos; 20.10.2013

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

using System.ComponentModel.DataAnnotations.Schema;
person jrummell    schedule 29.08.2012
comment
Опять же, это пространство имен .NET 4.5. Мне нужен 4.0. - person Hotrodmonkey; 30.08.2012
comment
Нет, это пространство имен Entity Framework. Ты это пробовал? Я использую это в проекте .NET 4.0 EF 5 прямо сейчас. - person jrummell; 30.08.2012
comment
Hotrodmonkey, .NET 4.0 поддерживает меньший набор функций EF 5.0, однако .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) поддерживается в EF 4.1+. В конечном итоге вы должны принять ответ @jrummell в качестве ответа. Если у вас возникли проблемы, убедитесь, что вы ссылаетесь на EF 4.1+ в своем приложении. Я использую его в производственном приложении EF 4.x .NET 4.0 уже более года. - person Ron DeFreitas; 09.12.2012

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

public class DeploymentLog
{
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int DeploymentLogId { get; set; }
person Mark Oreta    schedule 29.08.2012
comment
Это тоже не живет в 4.0 - person Hotrodmonkey; 29.08.2012
comment
открытый класс DatabaseGeneratedAttribute: атрибут/имя: System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedAttribute/сборка: System.ComponentModel.DataAnnotations, версия = 4.0.0.0 - person midspace; 27.03.2013

System.ComponentModel.DataAnnotations.Schema является частью .NET Framework только с версии 4.5.

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

#if NET40
...
#endif
person user247702    schedule 14.02.2013

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

  • удалить ссылку EntityFramework в проекте
  • щелкните правой кнопкой мыши проект, выполните «Управление пакетами NuGet», перейдите в категорию «Обновления» и нажмите «Обновить» в элементе Entity Framework, который был в списке до версии 6.
person Simon Mourier    schedule 29.06.2015