WCF数据服务 - 使用相关对象添加对象

时间:2012-05-29 19:37:14

标签: windows-phone-7 wcf-data-services

我有以下情况,我有一个带有User个对象和message个对象的WCF数据服务,message个对象与user有两个关系,一个发送者和接收者。

当我尝试添加新的Message对象时,相关用户将保持为空

Message message = new Message();
message.text = InputText; // string
message.Sender = Sender; // User object
message.Receiver = Receiver; // User object

context.AddToMessages(message);
context.BeginSaveChanges(new AsyncCallback((result) => 
{ 
    // Some code 
}));

现在发件人和收件人将为空。当我尝试在BeginSaceChanges之前设置链接时,我得到错误“InvalidOperationException:上下文当前没有跟踪实体。”

context.AddToMessages(message);
context.AddLink(message, "Sender", message.Sender);
context.AddLink(message, "Receiver", message.Receiver);
context.BeginSaveChanges(new AsyncCallback((result) => 
{ 
    // Some code 
}));

如何确保正确创建关系?

2 个答案:

答案 0 :(得分:1)

感谢Pratik,我找到了解决方案。我必须首先将已存在的用户SenderReceiver附加到上下文中,因为它们未被跟踪(并且如果它们在第二次调用时添加了一个if)。然后我添加消息并使用SetLink设置指向两个用户的链接(而不是AddLink

if(context.GetEntityDescriptor(message.Sender) == null)
    context.AttachTo("Users", message.Sender);
if (context.GetEntityDescriptor(message.Receiver) == null)
    context.AttachTo("Users", message.Receiver);
context.AddToMessages(message);
context.SetLink(message, "Sender", message.Sender);
context.SetLink(message, "Receiver", message.Receiver);
context.BeginSaveChanges(new AsyncCallback((result) => 
{ 
    // Some code 
}));

答案 1 :(得分:0)

我认为您需要使用DbSet.Attach方法。我假设您在后端使用Entity Framework。