1

User次のような状況があります。オブジェクトとオブジェクトを含む WCF データ サービスがmessageあり、オブジェクトには送信者と受信者のmessage2 つの関係があります。user

新しいオブジェクトを追加しようとするとMessage、関連するユーザーが null のままになります

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 
}));

Sender と Receiver は null になります。このような前にリンクを設定しようとすると、BeginSaceChanges「InvalidOperationException: The context is not currently tracking the entity.」というエラーが表示されます。

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コンテキストにアタッチを使用する必要がありました(2番目の呼び出しにいる場合は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代わりにメソッドを使用する必要があると思います。ここでは、バックエンドで Entity Framework を使用していると仮定します。

于 2012-05-29T20:35:45.383 に答える