2013-02-28 55 views
0

編輯如何插入子對象與Linq中的一對一關係到SQL

好了一切,我在做明智的代碼是正確的我已經把表上的關係,錯了!

問題

我有任務消息的一對一的關係。當插入新項目時,我得到一個外鍵違規。

詳情:

DB結構

Task 
    ID (Primary Key, Guid, Default = NEWID()) 
    MessageID (Unique Index with foreign key pointing to Message.ID) 

Message 
    ID (Primary Key, Guid, Default = NEWID()) 

爲每個表的主鍵dbml的設置具有自動生成值設置爲true和自動同步設置爲OnInsert

我有以下代碼插入新對象

var objMessage = new Data.Message() 
    { 
     Body = "", 
     Subject = "" 
    }; 
    Context.Messages.InsertOnSubmit(objMessage); 

    var objTask = new Data.Task() 
    { 
     Message = objMessage 
    }; 

    Context.Tasks.InsertOnSubmit(objTask); 
    Context.SubmitChanges(); 

這引發了違反外鍵約束的SQL錯誤。

SQL分析顯示linq to sql在消息之前插入任務,因爲它需要消息中的id,所以當然這會導致外鍵違例。

我在哪裏錯了?

回答

2

什麼問題,我可以看到的是第一InsertOnSubmit之前的SubmitChanges。如果你想把它添加到相關的表格,那麼我認爲你不需要第一個InsertOnSubmit。因爲當你插入主對象時,子對象也將被插入它的外鍵。

我想你可以做這樣的:

var objTask = new Data.Task() 
    { 
     Message = new Data.Message() 
       { 
        Body = "", 
        Subject = "" 
       } 
    }; 
    Context.Tasks.InsertOnSubmit(objTask); 
    Context.SubmitChanges(); 
+0

是,這是原始的方式我做到了,他們的方式我希望它的工作。我正在標記你的問題是正確的,因爲它是:)我的問題是編輯中的數據庫像我的編輯說,我已經把關係錯了。 – Dreamwalker 2013-02-28 13:43:57

0

試着這樣做:

var objMessage = new Data.Message() 
{ 
    Body = "", 
    Subject = "" 
}; 
Context.Messages.InsertOnSubmit(objMessage); 
Context.SubmitChanges(); 

var objTask = new Data.Task() 
{ 
    Message = objMessage 
}; 

Context.Tasks.InsertOnSubmit(objTask); 
Context.SubmitChanges(); 

必須使用新的記錄

相關問題