3

我的實體:EF插入重複行,即使父連接

用戶配置: - 的重要性沒有在這裏。

SupportTicket: - 用戶配置

SupportTicketMessage: - 用戶配置 - SupportTicket

我的問題是,每當我試圖插入SupportTicketMessage我得到一個額外的用戶配置插入到數據庫(一個副本),即使我已經附加了相應的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被插得很好,但它插入即使有重複的用戶配置匹配的一個已經。

這裏有什麼問題?

順便說一句,這裏的supportticketmessage構造:

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

任何人都可以幫助我嗎?這真的很煩人! –

+0

看看這個問題,他們解決了這個問題,併爲這個問題提供了三種解決方案:http://stackoverflow.com/questions/5416323/insert-new-object-with-existing-object –

+0

這是另一個可能有幫助:http://stackoverflow.com/questions/7884887/prevent-entity-framework-to-insert-values-for-navigational-properties –

回答

1

我得到插入到數據庫中的附加用戶配置(一式兩份 ),即使我已經附加了相應的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();