3

私のエンティティ:

UserProfile: - ここでは重要なことは何もありません。

サポートチケット: - ユーザープロファイル

SupportTicketMessage : - UserProfile - SupportTicket

私の問題は、SupportTicketMessage を挿入しようとするたびに、対応する SupportTicket を添付したにもかかわらず、追加の UserProfile がデータベース (複製) に挿入されることです。

これが私のコードです(SupportTicketクラス内にあるため、これはSupportTicketを意味します):

public void AddReply(UserProfile user)
{
    SupportTicketMessage msg = new SupportTicketMessage(user, this);
    using (DBContext db = new DBContext())
    {
        db.SupportTickets.Attach(msg.Ticket);
        db.SupportTicketMessages.Add(msg);
        db.SaveChanges();
     }
}

これを実行するたびに、SupportTicketMessage は問題なく挿入されますが、既に一致するものが存在する場合でも、重複した UserProfile が挿入されます。

ここで何が問題なのですか?

ちなみに、supportticketmessage コンストラクターは次のとおりです。

   public SupportTicketMessage(UserProfile author, SupportTicket ticket)
    {
        Author = author;
        Ticket = ticket;
        Date = DateTime.Now;
    }
4

1 に答える 1

1

対応する SupportTicket を添付したにもかかわらず、追加の UserProfile がデータベース (複製) に挿入されます。

はい、対応するSupportTicketを添付しましたが、実際に複製されたエンティティである をAttach(msg.Ticket)どこに添付しましたか? 渡すプロファイルにすでに設定されているUserProfile場合、重複は予期されていません。ただし、設定されているコード スニペットには表示されません。設定されていない場合は、以下も添付する必要があります。msg.Ticket.UserProfileAddReplymsg.Ticket.UserProfilemsg.UserProfile

db.UserProfiles.Attach(msg.Author);
db.SupportTickets.Attach(msg.Ticket);
db.SupportTicketMessages.Add(msg);
db.SaveChanges();
于 2013-08-01T22:48:15.947 に答える