2011-05-18 28 views
1

我對Entity Framework 4.1很新穎。我開始用EF作爲我的DAL編寫一個新應用程序。我使用數據庫優先方法使用POCO類(使用POCO t4模板)。ObjectSet.ApplyCurrentValues v/s StateManager.ChangeObjectState

我GenericRepository得到了下面的更新方法

public void Update(TEntity entity) 
{ 
    if (entity == null) 
    { 
     throw new ArgumentNullException("entity"); 
    } 

    _context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); 
    //_objectSet.ApplyCurrentValues(entity); 
} 

我有一個gridview這是數據綁定到具有UpdateMethod = 「UpdateStore」,它僅採用一個參數是如下的ObjectDataSource ...

public void UpdateStore(Store franchise) 
{ 
    unitOfWork.StoreRepository.Attach(franchise); 
    unitOfWork.StoreRepository.Update(franchise); 
    unitOfWork.SaveChanges(); 
} 

我在這裏遇到了幾個問題:

  1. 當我看到文檔對於ApplyCurrentValues,它證明我應該使用它來更新值,但這不起作用(正如您可以在上面的註釋行中看到的那樣)。然後,當我嘗試與ObjectStateManager.ChangeObjectState,它的作品。這兩種方法有什麼區別。

  2. 正如你所看到的,我首先附加然後應用更新方法。我可以在我的GenericRepository更新方法中結合attach和更新狀態。這樣做有沒有陷阱?當您連接從數據庫中加載實體

+0

我對使用ApplyCurrentValues編輯的鏈接有了一些瞭解。所以它在一定程度上解決了第一個問題,但很想知道第二個問題 – DotNetInfo 2011-05-18 01:42:09

回答

3
  1. ApplyCurrentChanges的使用和要更新您的ObjectDataSource收到脫離實體它的價值。當你這樣做時,所有新值都被複制到附屬實體,並自動標記爲ModifiedChangeObjectState用於更改附加實體的狀態 - 它什麼也不做。調用AttachUnchanged狀態中附加實體,因此這就是爲什麼您必須更改狀態以使您的更改持久存在數據庫中。
  2. 是的,您可以在單一方法中組合附加和設置狀態。只需要確保每個實體只會調用一次該方法。使用相同的Id連接實體兩次將引發異常。
相關問題