我正在使用使用Silverlight RIA服务的应用程序。我对这项技术不太熟悉。目前,我已经加载了用户的内容。用户可能有也可能没有地址。 Address是CLR对象,如果用户未提供其地址,则该对象可以为null。如果有,则地址包含街道,城市,州相关信息。此地址在我的视图模型中设置为property。我的UI双向绑定到视图模型中Address属性的属性。
当用户点击我的页面上的“保存”时,我希望将此地址插入或更新到我的数据库中。为了做到这一点,我有:
this.DomainContext.SubmitChanges(); // DomainContext is initialized in the constructor of my view model.
我注意到使用SQL事件探查器没有任何东西被发送到数据库。如何使用RIA服务更改数据库?
谢谢!
答案 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();
如果您可以分享更多代码,我可以清理我的示例,以便更直接地应用于您的问题。