У меня есть проект, построенный на основе ASP. NET MVC 5. Я использую Entity Framework 6.2 для доступа к данным из моей базы данных.
У меня есть следующие две модели
public class Entity<T> where T : struct
{
[Key]
public T Id { get; set; }
}
public class User : Entity<int>
{
public string FirstName { get; set; }
public int CategoryId { get; set; }
// more properties removed for the sake of simplicity
public virtual Category Category { get; set; }
}
public class Category : Entity<int>
{
public string Name { get; set; }
}
Вот как я обращаюсь к пользователю из контекста базы данных.
User user = await DbContext.Users.FirstAsync(10);
Однако я получаю следующее неожиданное исключение.
Невозможно определить основной конец ассоциации между типами «Категория» и «Пользователь». Основной конец этой ассоциации должен быть явно сконфигурирован с использованием либо API-интерфейса, поддерживающего отношения, либо аннотаций данных.
Я попытался добавить атрибут [ForeignKey]
к свойству Category
, но это тоже не сработало:
[ForeignKey("CategoryId")]
public virtual Category Category { get; set; }
Я также пытался добавить атрибут InverseProperty
[ForeignKey("CategoryId")]
[InverseProperty("Id")]
public virtual Category Category { get; set; }
, но аннотация обратного свойства выдает следующую ошибку:
Свойство Id не может быть настроен как свойство навигации. Свойство должно быть допустимым типом сущности, а свойство должно иметь неабстрактный метод получения и установки. Для свойств коллекции тип должен реализовывать ICollection, где T является допустимым типом сущности.
Что может быть причиной этой проблемы? Как я могу это исправить?