我有以下情况,我有一个带有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
}));
如何确保正确创建关系?
答案 0 :(得分:1)
感谢Pratik,我找到了解决方案。我必须首先将已存在的用户Sender
和Receiver
附加到上下文中,因为它们未被跟踪(并且如果它们在第二次调用时添加了一个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。