DetectChanges: нет записи для отношений, если присутствует ключевое свойство - PullRequest
0 голосов
/ 26 июня 2018

У меня есть два класса с отношением родитель-ребенок (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?

...