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