Это мой класс Student:
Код: Выделить всё
public class Student : Entity
{
public int Id { get; set; }
// ... etc
public virtual ICollection CustodialGuardians { get; set; }
public virtual ICollection NonCustodialGuardians { get; set; }
}
Код: Выделить всё
public class Guardian : Entity
{
public int Id { get; set; }
// ... etc
public virtual ICollection CustodialGuardianOf { get; set; }
public virtual ICollection NonCustodialGuardianOf { get; set; }
}
Код: Выделить всё
public class CustodialStudentGuardian
{
public virtual Guardian ParentGuardian { get; set; } = default!;
public virtual Student Student { get; set; } = default!;
public bool Custodial { get; set; } = default!;
}
Код: Выделить всё
modelBuilder.Entity(e =>
e.HasMany(s => s.CustodialGuardians)
.WithMany(s => s.CustodialGuardianOf)
.UsingEntity(c =>
{
c.HasOne(c => c.Student).WithOne();
c.HasOne(c => c.ParentGuardian).WithOne();
c.HasDiscriminator(d => d.Custodial).HasValue(true);
});
});
Это не работает, но я думаю, возможно, я закрывать. Я даже не склонен делать это таким образом - мне просто хотелось бы иметь возможность проводить различие между родителем-опекуном и родителем, не являющимся опекуном.
Я бы предпочел иметь одно свойство и фильтр запроса или что-то еще для объекта, вместо того, чтобы добавлять свойство как для хранения, так и для хранения. Например, я мог бы узнать, является ли родитель-опекуном, вместо того, чтобы спрашивать, есть ли у ученика родители-опекуны и является ли этот родитель одним из них.
Я знаю, что могу сделать это с помощью методов расширения и/ или запросы linq, но я надеялся, что смогу сделать это по соглашению, используя отношения.
Я все еще новичок в C# и EF Core, поэтому простите за неправильную терминологию.
Подробнее здесь: https://stackoverflow.com/questions/786 ... n-property