添加新实体后,是否需要调用我的域服务的context.SaveChanges?

时间:2011-02-15 11:45:22

标签: c# ria wcf-ria-services

我正在构建一个基于Ria Services的应用程序。

在Visual Studio向导构建的默认方法中,我可以看到应该插入并保留新数据的方法。

例如:

    public void InsertCustomer(Customer customer)
    {
        if ((customer.EntityState != EntityState.Detached))
        {
            this.ObjectContext.ObjectStateManager.ChangeObjectState(customer, EntityState.Added);
        }
        else
        {
            this.ObjectContext.Customers.AddObject(customer);
        }
    }

但是,我没有看到任何this.ObjectContext.SaveChanges(),我读取它应该被调用,以便在数据存储中插入实体。 ...我是否需要修改这些功能才能保留信息?

提前致谢, 干杯, 詹卢卡。

2 个答案:

答案 0 :(得分:4)

当您在客户端上调用SubmitChanges时,它会调用服务器上的DomainService.Submit。然后,默认实现依次调用许多受保护的虚拟方法,包括AuthorizeChangeSet,ValidateChangeSet,ExecuteChangeSet和PersistChangeSet。您的CUD操作将从ExecuteChangeSet调用,ObjectContext.SaveChanges()将从PersistChangeSet调用。

您无需修改​​默认方法来保留信息,因为默认情况下会对此进行处理。但是,如果您发现需要更复杂的场景,该设计可让您选择覆盖提交管道的块。

答案 1 :(得分:0)

你应该做的是这样的事情:

//Create an instance of your Domain context in your class.
YourDomainContext context = new YourDomainContext();

if (context.HasChanges)
{
    context.SubmitChanges(so =>
        {
            string errorMsg = (so.HasError) → "failed" : "succeeded";
            MessageBox.Show("Update " + errorMsg);
        }, null);
}
else
{
    MessageBox.Show("You have not made any changes!");
}

请在本文中查看此内容:Using WCF RIA Services 或者看一下这段视频:Silverlight Firestarter 2010 Session 3 - Building Feature Rich Business Apps Today with RIA Services