Аннотации данных 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

Итак... да, это то же самое, что и другие ответы, но я хочу указать на это!

Счастливое кодирование!