C# 未保存ObservableCollection编辑

C# 未保存ObservableCollection编辑,c#,linq,entity-framework,observablecollection,C#,Linq,Entity Framework,Observablecollection,我的ObservableCollection最终提取了数据,但现在它没有保存编辑 这是我的密码: public void FillDataGrid(Guid corporationId) { var query = from s in entity.Sources where s.CorporationId == corporationId select new SourceItem {

我的ObservableCollection最终提取了数据,但现在它没有保存编辑

这是我的密码:

public void FillDataGrid(Guid corporationId)
{
    var query = from s in entity.Sources
                where s.CorporationId == corporationId
                select new SourceItem
                {
                    CorporationId = s.CorporationId,
                    Description = s.Description,
                    IsActive = s.IsActive,
                    Name = s.Name,
                    SourceId = s.SourceId,
                    TokenId = s.TokenId
                };

    SoureItemCollection = new ObservableCollection<SourceItem>(query);
    SourceDataGrid.ItemsSource = SoureItemCollection;
    SourceDataGrid.Columns[2].Visibility = Visibility.Hidden;
    SourceDataGrid.Columns[0].IsReadOnly = true;
    SourceDataGrid.Columns[1].IsReadOnly = true;
}
和保存:

private void Save_Click(object sender, RoutedEventArgs e)
{
    entity.SaveChanges();
}

我是否要在保存之前将ObservableCollection绑定回实体?如果是这样,我该怎么做?

您已经创建了数据的副本,并且正在编辑该副本。实体框架上下文完全不知道这一点

您可以使用实体数据对象,而不是使用
SourceItem
中的字段。例如:

var query = from s in entity.Sources
            where s.CorporationId == corporationId
            select new SourceItem(s);

class SourceItem
{
  private SourceEntity _model;

  public SourceItem(SourceEntity model)
  {
      _model = model;
  }

  public Guid CorporationId
  {
    get { return _mode.CorporationId; }
    set
    {
      _model.CorporationId = value;
      OnPropertyChanged(this, "CorporationId");
    }
  }
}

注意,这与
可观测采集无关。如果要从集合中添加或删除项目,还需要将其同步到实体模型。您可以使用
CollectionChanged
事件进行此操作。

请参见,问题在于表达式“var query=from s in entity.Sources..select new SourceItem{..}”没有检索附加到上下文(entity)的实体,但您创建了SourceItem类型的新对象,无法映射回db实体。
您应该做的是,您可能应该更改由entity.Sources对象直接支持的SourceItem类(我想应该是它的构造函数参数)。将SourceItem字段委托回相应的源字段(双向)。因此,SourceItem将封装Sources对象,并使用所有用于MVVM操作的WPF材料对其进行修饰。

我让绑定只保存已经存在的记录。ObservableCollection的这一点是为了让添加和删除工作正常……我正在尝试实现这一点,但我在
源项
方面遇到了问题。我不确定那到底是什么<代码>\u model
未扩展到所显示的基础字段。
var query = from s in entity.Sources
            where s.CorporationId == corporationId
            select new SourceItem(s);

class SourceItem
{
  private SourceEntity _model;

  public SourceItem(SourceEntity model)
  {
      _model = model;
  }

  public Guid CorporationId
  {
    get { return _mode.CorporationId; }
    set
    {
      _model.CorporationId = value;
      OnPropertyChanged(this, "CorporationId");
    }
  }
}