У меня есть две сущности: Student и Guardian. Мне нужен простой способ различать доверительные и некастодиальные отношения.
Итак, у меня есть 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, но я надеялся, что смогу сделать это по соглашению, используя отношения.
Я все еще новичок в CSharp и EfCore, поэтому простите за неправильную терминологию.
Подробнее здесь: https://stackoverflow.com/questions/786 ... n-property