2011-05-17 46 views
0

我試圖從一個WCF客戶端更新實體如下:如何停止WCF數據服務來獲取數據時SavingChanges(更新中)

 Ctxt.MergeOption = MergeOption.NoTracking; 
     var q = Ctxt.Customers.Where(p => p.MasterCustomerId == "JEFFERSON").Select(o => o); 
     //DataServiceCollection<Customer> oCustomers = new DataServiceCollection<Customer>(q, TrackingMode.None); 
     DataServiceCollection<Customer> oCustomers = new DataServiceCollection<Customer>(q); 
     oCustomers[0].FirstName = "KEFFERSON"; 
     //Ctxt.SaveChanges(SaveChangesOptions.ReplaceOnUpdate); 
     //ctxt.SaveChangesDefaultOptions = SaveChangesOptions.ReplaceOnUpdate; 
     Ctxt.SaveChanges(); 

當我試圖保存修改後的實體,它首先嚐試使用選擇查詢(對數據庫)加載該實體,然後將更新語句發佈到數據庫。

在我的情況下,我只是想讓實體在數據庫中直接更新而不需要先取得它。

protected override EF.Model.DataModel.PersonifyEntities CreateDataSource() 
{ 
    var ctxt = new EF.Model.DataModel.PersonifyEntities(); 
    ctxt.Customers.MergeOption = System.Data.Objects.MergeOption.NoTracking; 
    ctxt.ContextOptions.ProxyCreationEnabled = false; 
    ctxt.ContextOptions.LazyLoadingEnabled = false; 
    return ctxt; 
} 

但是,沒有運氣:如果將覆蓋數據庫

我試圖在WCF服務的下列數據,我不介意。誰可以幫我這個事?

回答

0

對於WCF DataServices,客戶端只能更新其跟蹤的實體。因此必須先將實體下載到客戶端,然後才能進行任何更改並將其保存回來。這就是爲什麼你在更新之前看到提取(我假設這是你爲特定實體看到的第一個提取)。希望這可以幫助。

+0

我知道需要將實體提供給客戶端的第一次獲取。我所關心的僅僅是「SaveChanges」期間的第二個問題。當我調試代碼時(來自VS和SQL Profiler),我可以看到在填充「DataServiceCollection」期間發生第一次讀取(SELECT)。當我打開/傳遞「SaveChanges」(在VS中)時,我看到另一個讀取(SQL Profiler中的另一個SELECT語句),後面跟着UPDATE語句。 – user203687 2011-05-18 16:35:24

相關問題