如何在Entity Framework中初始化和操作ObservableCollection?

时间:2015-08-20 10:37:03

标签: c# entity-framework observablecollection

我在ViewModel中有一个ObservableCollection,我按以下方式初始化它:

public ViewModel()
{
    List<T> list = null;

    using (var context = new DbContext())
    {
        list = context.Set<T>().ToList();
    }

    Items = new ObservableCollection<T>(list);
}

每次我在上下文中添加一个项目时,我都会将它添加到集合中。

public void Add<T>(T obj)
{
    using (var context = new DbContext())
    {
        context.Set<T>().Add(obj);
        context.SaveChanges();
    }

    Items.Add(obj);
}

何时从上下文中删除一个项目,我也会从ObservableCollection中删除它。

还有一个替代方案,我可以在将项目添加到上下文中或从上下文中删除后再次初始化ObservableCollection:

public void Add<T>(T obj)
{
    List<T> list = null;

    using (var context = new DbContext())
    {
        context.Set<T>().Add(obj);
        context.SaveChanges();

        list = context.Set<T>().ToList();
    }

    Items = new ObservableCollection<T>(list);
}

现在我需要知道在性能和内存管理方面哪种方式更好?

1 个答案:

答案 0 :(得分:1)

我更喜欢第一种模式,因为第二种模式会重新加载数据库中的所有项目。这可能是比重新初始化集合更大的性能问题。

此外,如果您更喜欢创建一个新实例而不是保留旧实例并处理其在添加或删除元素时被触发的CollectionChange事件,那么我没有看到使用ObservableCollection而不是普通List的优势。