Я пытаюсь реализовать абстрактный класс для объектов CRUD, который содержит две ссылки на класс User;один для пользователя, который создал объект, и другой для пользователя, который последний раз его изменял. Платформа сущностей не может определить взаимосвязь, представленную навигационными свойствами CreatedBy и ModifiedBy для наследующего их класса (Department). Потенциальная дополнительная сложность заключается в том, что класс User также имеет свойство класса Department, которое не связано со свойствами CreatedBy и ModifiedBy в Department.
Ниже приведено сообщение об ошибке:
Невозможно определить отношение, представленное свойством навигации «Department.CreatedBy» типа «Пользователь». Либо настройте отношение вручную, либо игнорируйте это свойство с помощью атрибута «[NotMapped]» или с помощью «EntityTypeBuilder.Ignore» в «OnModelCreating».
Я использую dotnet 3.0 и EF Core 3.0
Я пытался настроить различные атрибуты данных ForeignKey и использовать Fluent API, следуя документации EF, но мне не удалось заставить их работать.
public class User
{
[Key]
public int Id { get; set; }
public Department Department { get; set; } = null!;
}
public class Department : AbstractCrudObject
{
}
public abstract class AbstractCrudObject
{
[Key]
public int Id { get; set; }
[ForeignKey("CreatedByUserId")]
public User CreatedBy { get; set; } = null!;
public int CreatedByUserId { get; set; }
[ForeignKey("ModifiedByUserId")]
public User ModifiedBy { get; set; } = null!;
public int ModifiedByUserId { get; set; }
}
public class AppDbContext : DbContext
{
public virtual DbSet<User> Users { get; set; } = null!;
public virtual DbSet<Department> Departments { get; set; } = null!;
public AppDbContext()
{
}
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
}
}