2013-03-10 81 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必須存在,直到在對該上下文進行任何修改後調用保存更改爲止。