Вы можете абсолютно иметь такие виды отношений, но они должны быть настроены правильно, и иногда вам нужно вставлять сущности и позже обновлять их, чтобы обойти применение FK во время вставки, а не во время фиксации.
В частности, EF не имеет соглашения о сопоставлении свойств обратной навигации, когда между двумя объектами существует несколько взаимосвязей.
EG
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int DepartmentId { get; set; }
[InverseProperty(nameof(EfCore3Test.Department.Members))]
public Department Department { get; set; }
[InverseProperty(nameof(EfCore3Test.Department.Manager))]
public virtual ICollection<Department> ManagedDepartments { get; } = new HashSet<Department>();
}
public class Department
{
public int Id { get; set; }
public virtual ICollection<Person> Members { get; } = new HashSet<Person>();
public Person Manager { get; set; }
public int ManagerId { get; set; }
}
И, как правило, каскадирование невозможно поведение на всех FK, поэтому вы настраиваете хотя бы один, чтобы не каскадировать.
modelBuilder.Entity<Department>()
.HasMany(d => d.Members)
.WithOne(m => m.Department)
.OnDelete(DeleteBehavior.NoAction);