如何跟踪集合的更改

时间:2012-10-22 08:30:00

标签: .net entity-framework

我有一个包含另一个类的对象的类:

public class Container
{
    public BindingList<Item> Items { get; set; }
}
public class Item
{
    ...
}

Container的对象附加到DbContext。我想覆盖DbContext's SaveChanges()以通过WCF服务发送所有更改。

原始属性没问题。它们反映在Entries中。但是,如果Item与其Container之间的关系发生变化(例如添加了新项目或删除了现有项目),则ChangeTracker中没有相关条目。

我可以在Item类中添加ForeignKey来强制Modified条目,但这对我没什么帮助,因为我需要知道包含对象。

我还尝试将DbContext转换为ObjectContext以获取实体的所有相关项目。但我认为无法获得RelatedEnd的实际对象。

有没有办法跟踪所包含集合的变化?

更新

根据要求,我已经拥有一些代码:

//In a DbContext subclass
public override int SaveChanges()
{
    //get all modified entities
    var changes = this.ChangeTracker.Entries();
    foreach (var c in changes)
    {
        //check the state of the entity
        switch (c.State)
        {
            //send according WCF callback to the clients
            case System.Data.EntityState.Added:
                App.Current.ServerManager.SendEvent(s => s.EntityAdded((IIdentifiable)c.Entity), causedBy);
                break;
            ...
        }
    }
    return base.SaveChanges();
}

使用此代码,我无法检测到Items集合的更改。

1 个答案:

答案 0 :(得分:1)

看看this question它显示了如何获得更多关系。希望它可以帮助你得到你需要的东西。