DetectChanges:如果存在关键属性,则不存在关系条目

时间:2018-06-26 09:51:05

标签: entity-framework entity-framework-6

我有两个具有父子(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列时如何检测关系变化?

0 个答案:

没有答案