EF插入重复行,即使父行已附加

本文关键字:插入 EF | 更新日期: 2023-09-27 18:25:52

我的实体:

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

支持票证:-用户档案

支持TicketMessage:-用户配置文件-支持票证

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

这是我的代码(在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,即使已经有一个匹配的UserProfile。

这里出了什么问题?

顺便说一句,这是supportticketmesage构造函数:

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

EF插入重复行,即使父行已附加

我在数据库中插入了一个附加的UserProfile(重复),即使我已附上相应的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();