私はEntity Framework 4.1 - Code Firstを使用しています。私はUser
とMessage
エンティティの間に多対多の関係があります。この関係は別のエンティティUserMessage
によってマッピングされます。私が実装したメッセージングシステムはGmailと似ています。つまり、メッセージは最初のメッセージに沿ってメッセージの返信が表示される「スレッド」です。受信トレイからメッセージを削除
今、ユーザーの受信トレイからメッセージを削除しようとしていますが、他のユーザーが受信トレイからメッセージを削除することを選択していない可能性があるため、データベースから削除されることはありません。残念ながら、私のコードは次の例外をスローされます。
「UserMessage_Receiver」AssociationSet からの関係は、「削除された」状態です。 の多重度の制約がある場合、 に対応する 'UserMessage_Receiver_Source'は も '削除済み'の状態である必要があります。
は、ここでは、コード関係です:
public class UserMessage
{
public int Id { get; set; }
public DateTime? LastViewed { get; set; }
public bool IsRead { get; set; }
public virtual Message Message { get; set; }
public virtual User Sender { get; set; }
public virtual User Receiver { get; set; }
}
public void DeleteFromInbox(int messageId, User user)
{
var message = _repository.First<UserMessage>(c=>c.Message.Id.Equals(messageId));
var replies = GetReplies(user, messageId);
foreach (var reply in replies)
{
if (user.ReceivedMessages.Contains(reply))
{
user.ReceivedMessages.Remove(reply);
reply.Receiver = null;
}
if (user.SentMessages.Contains(reply))
{
user.SentMessages.Remove(reply);
reply.Sender = null;
}
}
message.Receiver = null;
user.ReceivedMessages.Remove(message);
}
だからここで私が間違って行くのですか?
どのような結果型が代入の右部分から使われているのか分かりますが、 'GetReplies'の場合は返す型と' foreach'が取り除いているものは分かりません。 –
@Ladislav Mrnka:それは 'IList'を返しています:) –
Kassem