我正在迁移基于类型化数据集的 WPF 应用程序以使用 Entity Framework 5 Code First (.Net 4.5)。
我目前使用 DataSet 中的数据加载模型。然后将模型字段绑定到 XAML DataGrids。使用模型中的 ObservableCollections 和从 INotifyPropertyChanged 派生的域对象的组合,我可以获得在集合和域对象级别正在进行的 CRUD 操作并采取相应的行动:
public class DomainObject : INotifyPropertyChanged
{
public DataRowState State;
...
}
public class Model
{
private ObservableCollection<DomainObject> _family = new ObservableCollection<DomainObject>();
public Model()
{
List<DomainObject> objs = DS.GetObjects();
foreach ( var obj on objs )
{
obj.PropertyChanged += OnObjectChanged;
_family.Add(obj);
}
_family.CollectionChanged += OnCollectionChanged;
}
void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
// do stuff against DataSet based on e.Action
...
}
private void OnObjectChanged(object sender, PropertyChangedEventArgs e)
{
// do stuff against DataSet based on sender's (DomainObject) State property.
...
}
}
在我当前的实现中,当用户按下按钮时,我可以在将数据集中的 CRUD 操作写入数据库之前对它们进行伪批处理Save
,或者如果按下取消,则丢弃 DataSet。
EF DbContext 的使用模式是否类似于我在使用 DataSet 填充模型时的使用方式?如果您希望能够保存对象更新,那么 Context 似乎必须在模型的整个生命周期内一直存在。
感谢您的任何指导!科里。