1

我有以下情况,我有一个带有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 
}));

如何确保正确创建关系?

4

2 回答 2

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 
}));
于 2012-05-30T10:50:25.850 回答
0

我相信您需要改用该DbSet.Attach方法。我假设您在这里使用后端的实体框架。

于 2012-05-29T20:35:45.383 回答