Причина
Причина в том, что имеется несколько свойств навигации на парах зависимых и главных объектов .Учитывая следующие отношения между HostApplicationUser
и ApplicationUser
:
ApplicationUser
<->
HostApplicationUser.ApplicationUser
ApplicationUser
<->
HostApplicationUser.ApplicationCreatedUser
ApplicationUser
<->
HostApplicationUser.ApplicationLastModifiedUser
- ... и потенциальные отношения для
DeletedBy
Если у вас есть свойство навигации для HostApplicationUser
на ApplicationUser
:
public class ApplicationUser{
public string Id{get;set;}
public string Name {get;set;}
public IList<HostApplicationUser> HostApplicationUsers{get;set;}
}
И если нет дополнительной конфигурации, EF Core
не может определить, является ли свойство Application.HostApplicationUsers
CreatedUsers
, LastModifiedUsers
, DeletedUsers
или чем-то другим, например, EF Core
не может определить, как свойство ApplicationUser.HostApplicationUsers
перемещается к HostApplicationUser
, поэтому жалуется:
Невозможно определить отношение, представленное свойством навигации 'HostApplicationUser.ApplicationCreatedUser'типа «ApplicationUser».Либо настройте отношение вручную, либо проигнорируйте это свойство с помощью атрибута [NotMapped] или с помощью EntityTypeBuilder.Ignore в OnModelCreating.
Как исправить
Кисправить проблему, просто украсить ApplicationUser.HostApplicationUsers
InversePropertyAttribute
:
public class ApplicationUser{
public string Id{get;set;}
public string Name {get;set;}
[InverseProperty("ApplicationUser")]
public IList<HostApplicationUser> HostApplicationUsers{get;set;}
}
Или, если вы хотите иметь несколько свойств навигации, вам нужно добавить [InverseProperty("ApplicationCreatedUser")]
, [InverseProperty("ApplicationLastModifiedUser")]
, [InverseProperty("ApplicationDeletedUser")]
и т. Д. Для каждого свойства навигации:
public class ApplicationUser{
public string Id{get;set;}
public string Name {get;set;}
[InverseProperty("ApplicationUser")]
public IList<HostApplicationUser> HostApplicationUsers{get;set;}
[InverseProperty("ApplicationCreatedUser")]
public IList<HostApplicationUser> HostApplicationCreatedUsers{get;set;}
[InverseProperty("ApplicationLastModifiedUser")]
public IList<HostApplicationUser> HostApplicationLastModifiedUsers{get;set;}
// ...
}