Дизайн в порядке. Но беглой конфигурации нет. EF Core не позволяет использовать вложенные свойства внутри плавного API, поэтому использование методов HasKey
и HasForeignKey
приведет к исключению времени выполнения.
Поскольку ваша модель соответствует соглашениям EF Core, и все отношения описаны с использованием свойств навигации на обоих концах, EF Core сможет автоматически определять практически все без любой свободной конфигурации, кроме составного первичного ключа объекта объединения. Это единственное, что требует плавной конфигурации.
Хотя можно настроить составной ПК только с теневыми свойствами (зная соглашения EF Core для именования свойств FK, например public Person Person
-> int PersonId
):
modelBuilder.Entity<ProductionPersonRole>()
.HasKey("ProductionId", "PersonId", "RoleId");
Я бы порекомендовал добавить явные свойства FK к объекту соединения:
public class ProductionPersonRole
{
public int ProductionId { get; set; }
public int PersonId { get; set; }
public int RoleId { get; set; }
public Production Production { get; set; }
public Person Person { get; set; }
public Role Role { get; set; }
}
и использовал вместо него следующую конфигурацию:
modelBuilder.Entity<ProductionPersonRole>()
.HasKey(ppr => new { ppr.ProductionId, ppr.PersonId, ppr.RoleId });
Он не только позволяет избежать использования жестко закодированных строк, но также может быть очень полезен при вставке / удалении ссылок в отключенных сценариях.