即使附加了父级,EF也会插入重复行

时间:2013-08-01 13:49:46

标签: c# database visual-studio entity-framework linq-to-entities

我的实体:

用户配置: - 这里没什么重要的。

SupportTicket:   - UserProfile

SupportTicketMessage:  - 用户资料   - SupportTicket

我的问题是每当我尝试插入SupportTicketMessage时,即使我附加了相应的SupportTicket,我也会在数据库中插入一个额外的UserProfile(一个副本)。

这是我的代码(在SupportTicket类中,所以 this 表示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;
    }

1 个答案:

答案 0 :(得分:1)

  

我在数据库中插入了一个额外的UserProfile(a   重复)即使我附上了相应的SupportTicket。

是的,您已将相应的SupportTicketAttach(msg.Ticket)相关联,但您在哪里附加了实际上是重复实体的UserProfile?如果已将msg.Ticket.UserProfile设置为您传递到AddReply的配置文件,则复制是意外的。但是在msg.Ticket.UserProfile设置的代码段中不可见。如果没有设置,您还需要附加msg.UserProfile

db.UserProfiles.Attach(msg.Author);
db.SupportTickets.Attach(msg.Ticket);
db.SupportTicketMessages.Add(msg);
db.SaveChanges();