0

我有一个silverlight 4 RIA域名服务。在一个特定的方法中,我需要更改数据库中的一个值(当然还有其他值)。为此,我得到实体,更改一个值,然后我需要将该更改保存回数据库。我试过调用实体的生成的更新函数,它只是调用this.ObjectContext.myEntity.AttachAsModified(myENtity);但变化永远不会回到数据库。域名服务 - 服务器端更新

如何保存服务器端的值(即客户端从未拥有过这些数据)?

回答

0

原来,之前或之后的连接对象变化没有任何区别。 缺失的peice是:

this.ObjectContext.SaveChanges();

0

您应该知道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 
    } 
+0

我从你的回答中读到的是,实体应该在改变之前被附加。这是有道理的,但变化仍然没有到达数据库。还有什么我需要打电话让它实际上sumbit以后? – Shaboboo 2011-05-18 14:50:03

+0

不。有一个称为Sumbit的虚拟方法,在UpdateXXX被调用后调用。 - public override bool Submit(ChangeSet changeSet)。它由DomainService类自动调用。 – 2011-05-18 23:24:34