У меня есть два класса с отношением родитель-ребенок (1: n), и я хочу определить, когда родитель изменился, добавив в него дочерний элемент.
Я переопределил SaveChanges
метод контекста:
public override int SaveChanges()
{
var ctx = ((IObjectContextAdapter)this).ObjectContext;
ctx.DetectChanges();
var entries = ctx.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified);
foreach (var entry in entries)
{
if (entry.IsRelationship)
{
Console.WriteLine("Relationship");
}
else
{
Console.WriteLine("Entity");
}
}
return base.SaveChanges();
}
Как и ожидалось, при добавлении дочернего элемента к родительскому элементу я получаю запись сущности для дочернего элемента и запись отношения для родительско-дочерних отношений. Но как только дочерний класс содержит ключевое свойство для родителя, я больше не получаю никаких записей отношений для этих отношений.
class Class1
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; }
public ICollection<Class2> Class2s { get; set; }
}
class Class2
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; }
public Class1 Parent { get; set; }
public int ParentId { get; set; } // <-- no relationship entries if present
}
Это ожидаемое поведение? Как я могу обнаружить изменения отношений при наличии столбца id?