Аннотации данных EF не работают после таргетинга .NET 4.5
У меня есть проект, предназначенный для .NET 4.0 и использующий EF 5.0. После изменения целевой структуры до 4.5 (и обновления ссылки EF 5.0 для использования сборки .NET 4.5) кажется, что аннотации данных больше не работают. Например:
[Table("ApplicationSession", Schema = "Application")]
public class ApplicationSessionEntity
{
[Key, ForeignKey("GenericSession")]
public int GenericSessionID { get; set; }
...
используется для работы отлично, но теперь во время выполнения DbContext
выбрасывает InvalidOperationException
: Unable to determine the principal end of an association...
.
Я могу добавить вызовы Fluent api для решения этой проблемы (и это так), но затем он не признает, что таблица не находится в схеме "dbo". Опять же, я знаю, что Fluent api можно использовать для решения этого вопроса, но почему аннотации данных внезапно игнорируются?
Спасибо!
Ответы
Ответ 1
В .NET Framework 4.5 аннотации EF были перенесены из EF.dll в сборку System.ComponentModel.Annotations. Кажется, что даже если вы нацелились на .NET Framework 4.5, у вас все еще есть ссылка на EntityFramework.dll v4.4.0.0 где-то. В результате ваши классы скомпилированы с атрибутами из сборки 4.4.0.0. Во время выполнения используется новый EntityFramework.dll(5.0.0.0) и ищет атрибуты из сборки System.ComponentModel.DataAnnotations. Они не могут быть найдены, так как у вас есть EF.dll 4.4.0.0, и поэтому похоже, что атрибуты игнорируются.
Ответ 2
Верно, что он был перемещен за пределы EF, если вы используете .NET версии 4.5 и выше. Но если вы компилируете в .NET 4.0, вы найдете DataAnnotations
как использование. Внутри кода вы найдете следующее:
#if NET40
namespace System.ComponentModel.DataAnnotations
{
...
}
#endif
Итак... да, это то же самое, что и другие ответы, но я хочу указать на это!
Счастливое кодирование!