【问题标题】:DbSet<>.Local ObservableCollection not saving to EF context databaseDbSet<>.Local ObservableCollection 未保存到 EF 上下文数据库
【发布时间】:2015-02-06 08:46:58
【问题描述】:

我有一个 WPF MVVM 应用程序,其 DataGrid 绑定到由 DbSet.Local 返回的 ObservableCollection。网格正确显示数据库中的内容,对网格的更改会更改 ObservableCollection,但不会将更改保存回数据库。

上下文.cs

public class AppContext: DbContext 
{
    public AppContext() : base("name=DefaultConnection") 
    {

    }

    public DbSet<Field> Fields { get; set; } 
}

ViewModel.cs

public class EditorViewModel : NotificationObject
{
    private ObservableCollection<MyEntity> _myEntities;
    private string _message;

    public EditorViewModel()
    {
        var db = new AppContext();
        db.MyEntities.Load();

        this.MyEntities = db.MyEntities.Local;
    }

    public ObservableCollection<MyEntity> MyEntities
    {
        get
        {
            return _myEntities;
        }
        set
        {
            if (_myEntities != value)
            {
                _myEntities = value;
                RaisePropertyChanged("MyEntities");
            }
        }
    }
}

我曾认为对 ObservableCollection 的更改会自动写回数据库?还是需要在某处调用 SaveChanges?

【问题讨论】:

  • 很遗憾让您知道,但编程并不涉及魔法。您必须跟踪对象的状态,确定用户是否更改了它们,确定用户是否希望保存(而不是撤消)这些更改,然后将它们写回数据库。没有人会为你这样做。
  • @Will:“足够先进的技术与魔法无异”。确定支持 EF 实体的先进技术在第一次遇到它时可以做什么和不能做什么肯定会很棘手。也许它确实做了一些你认为需要魔法才能实现的事情来很好地说明这一点......

标签: entity-framework mvvm prism wpfdatagrid


【解决方案1】:

所以这个问题的答案是使用 DbSet.Local 使 ObservableCollection 与上下文保持同步,然后您只需要在上下文上调用 SaveChanges 以写回数据库。

http://msdn.microsoft.com/en-gb/data/jj592872.aspx

【讨论】:

    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2013-08-14
    • 2021-10-27
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多