【问题标题】:domain service - server side update域服务 - 服务器端更新
【发布时间】:2011-05-17 17:40:42
【问题描述】:

我有一个 silverlight 4 RIA 域服务。在一种特定的方法中,我需要更改数据库中的一个值(当然还有其他)。为此,我获取实体,更改一个值,然后我需要将该更改保存回数据库。

我尝试调用实体生成的更新函数,它只是调用 this.ObjectContext.myEntity.AttachAsModified(myENTity);但更改永远不会返回到数据库。

我如何保存来自服务器端的值(即客户端从来没有这个数据)?

【问题讨论】:

    标签: silverlight entity-framework entity-framework-4 domainservices


    【解决方案1】:

    您应该知道 UpdateXXX 方法实际上并没有将更改提交到数据库 - 只是稍后才会发生。知道了这一点,我们可以更改 UpdateXXX 方法的默认实现:(我假设 XXX == Product here)

        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 的虚拟方法在 UpdateXXX 被调用之后被调用。 - 公共覆盖布尔提交(更改集更改集)。它由 DomainService 类自动调用。
    【解决方案2】:

    事实证明,在更改之前或之后附加对象没有区别。 缺少的部分是:

    this.ObjectContext.SaveChanges();

    【讨论】:

      猜你喜欢
      • 2019-06-02
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2019-04-13
      • 2012-01-17
      • 1970-01-01
      • 2013-10-30
      相关资源
      最近更新 更多