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