Silverlight RIA服务 - 提交更改/更新

时间:2011-04-22 18:21:38

标签: c# silverlight

我正在使用使用Silverlight RIA服务的应用程序。我对这项技术不太熟悉。目前,我已经加载了用户的内容。用户可能有也可能没有地址。 Address是CLR对象,如果用户未提供其地址,则该对象可以为null。如果有,则地址包含街道,城市,州相关信息。此地址在我的视图模型中设置为property。我的UI双向绑定到视图模型中Address属性的属性。

当用户点击我的页面上的“保存”时,我希望将此地址插入或更新到我的数据库中。为了做到这一点,我有:

this.DomainContext.SubmitChanges(); // DomainContext is initialized in the constructor of my view model.

我注意到使用SQL事件探查器没有任何东西被发送到数据库。如何使用RIA服务更改数据库?

谢谢!

2 个答案:

答案 0 :(得分:1)

Ed的示例肯定是满足您需求的好方法,但我建议您使用回调来处理涉及RIA服务的Silverlight操作:

// Save
            SubmitOperation so = dataContext.SubmitChanges();

            // Callback
            so.Completed += (s, args) =>
                                {
                                    // Error?
                                    if (so.HasError)
                                    {
                                        // Message
                                        MessageBox.Show(string.Format("The following error has occurred:\n\n{0}", so.Error.Message));

                                        // Set
                                        so.MarkErrorAsHandled();
                                    }
                                };

答案 1 :(得分:0)

我假设您的模型在服务器上定义为

public class User
{
    [Key]
    public int? UserID { get; set; }

    /* Other properties */

    [Association("User_1-1_Address", "UserID", UserID", IsForeignKey = false)]
    [Include]
    public Address Address { get; set; }
}

public class Address
{
    [Key]
    public int? UserID { get; set; }

    /* Other properties */


    [Association("User_1-1_Address", "UserID", UserID", IsForeignKey = true)]
    [Include]
    public User User{ get; set; }
}

,您的DomainService允许插入/更新地址。

public void InsertAddress(Address address) { ... }
public void UpdateAddress(Address address) { ... }

在客户端上,当您添加新的Address时,您的ViewModel会在用户上设置它。

this.User.Address = new Address();

这会导致您的域名服务上的InsertAddress方法被调用

this.DomainContext.SubmitChanges();

如果Address已经存在,那么

this.User.Address.City = "Oz";

会导致您的域名服务上的UpdateAddress方法被调用

this.DomainContext.SubmitChanges();

如果您可以分享更多代码,我可以清理我的示例,以便更直接地应用于您的问题。