我有一個silverlight 4 RIA域名服務。在一個特定的方法中,我需要更改數據庫中的一個值(當然還有其他值)。爲此,我得到實體,更改一個值,然後我需要將該更改保存回數據庫。我試過調用實體的生成的更新函數,它只是調用this.ObjectContext.myEntity.AttachAsModified(myENtity);但變化永遠不會回到數據庫。域名服務 - 服務器端更新
如何保存服務器端的值(即客戶端從未擁有過這些數據)?
我有一個silverlight 4 RIA域名服務。在一個特定的方法中,我需要更改數據庫中的一個值(當然還有其他值)。爲此,我得到實體,更改一個值,然後我需要將該更改保存回數據庫。我試過調用實體的生成的更新函數,它只是調用this.ObjectContext.myEntity.AttachAsModified(myENtity);但變化永遠不會回到數據庫。域名服務 - 服務器端更新
如何保存服務器端的值(即客戶端從未擁有過這些數據)?
原來,之前或之後的連接對象變化沒有任何區別。 缺失的peice是:
this.ObjectContext.SaveChanges();
您應該知道UpdateXXX方法實際上並未將更改提交到數據庫 - 僅在稍後發生。知道這一點,我們可以改變UpdateXXX方法的默認實現:(我假設這裏XXX ==產品)
public void UpdateProduct(Product currentProduct)
{
this.ObjectContext.Products.AttachAsModified(currentProduct, this.ChangeSet.GetOriginal(currentProduct));
}
到
public void UpdateProduct(Product currentProduct)
{
// This line only reattach the entity back to EF context, it doesn't submit changes yet
this.ObjectContext.Products.AttachAsModified(currentProduct, this.ChangeSet.GetOriginal(currentProduct));
currentProduct.SomeProperty = "SomeChange"; // This change is going to be submitted later
}
我從你的回答中讀到的是,實體應該在改變之前被附加。這是有道理的,但變化仍然沒有到達數據庫。還有什麼我需要打電話讓它實際上sumbit以後? – Shaboboo 2011-05-18 14:50:03
不。有一個稱爲Sumbit的虛擬方法,在UpdateXXX被調用後調用。 - public override bool Submit(ChangeSet changeSet)。它由DomainService類自動調用。 – 2011-05-18 23:24:34