2013-03-10 64 views
0

使用我迁移基于数据集类型的WPF应用程序使用实体框架5码时首先上下文的持续时间(.NET 4.5)。EF代码优先 - 在填充模型

我目前加载了从DataSet数据模型。模型字段然后绑定到XAML DataGrid。从INotifyPropertyChanged的衍生型号和域对象使用ObservableCollections的组合,我能得到哪些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. 
    ... 
} 
} 

在我目前的执行情况,我能当用户按下一个按钮Save,或者按下取消该数据集被丢弃到伪批了数据集中的CRUD操作将其写入到数据库之前。

是它的EF的DbContext可接受的方式来使用它类似于我如何使用时,用于填充模型中的数据集?如果您希望能够保存对象更新,则似乎上下文必须留在模型的整个生命周期中。

感谢您的任何指导! 科里。

+1

如果你正在使用你的系统域对象,你应该能够做到以下几点当保存按钮用户点击:火了的DbContext(在using语句),使用LINQ抢EF对象,执行更新通过读取Domain对象到EF对象,调用DbContext上的SaveChanges。 – failedprogramming 2013-03-10 22:48:06

+0

这可能是你http://dotnetslackers.com/articles/ado_net/Managing-Entity-Framework-ObjectContext-lifespan-and-scope-in​​-n-layered-ASP-NET-applications.aspx一个有用的链接 – failedprogramming 2013-03-10 22:50:06

+0

谢谢!如果域对象是派生类,那么我是否必须为每个基类编写一个复制操作符来将更新迁移到EF保持的对象? – cardinalPilot 2013-03-10 22:53:44

回答

0

我想你问的是使用的DbContext一些撤销/重做的实施,对于检查出this article,并且我看你是使用WPF所以你应该尝试使用IEditableObject interface该机制。另一方面,DbContext必须存在,直到在对该上下文进行任何修改后调用保存更改为止。