2011-11-05 120 views
1

問題是與外鍵:插入值外鍵

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_uzytkownik_Logowanie". The conflict occurred in database "Restauracja", table "dbo.Logowanie", column 'LoginID'.
The statement has been terminated.

我檢查這個使用斷點,並在Logowanie表的主鍵時,斷點(運行的應用程序)是

baza.SubmitChanges(); 

後加入在logowanie表中的LoginID的主鍵在SubmitChanges期間自動添加。

如何將LoginID的值從logowanie表中複製到LoginIDuztkownik表中?我在這裏添加外鍵值,但這裏LoginID還沒有值。

Logowanie newlog = new Logowanie() 
{ 
    Login = model.LoginModel.Użytkownik, 
    Haslo = model.LoginModel.Hasło, 
    konto = model.LoginModel.Konto 
}; 

uzytkownik user = new uzytkownik() 
{ 
    imie = model.uzytkownikModle.imie, 
    nazwisko = model.uzytkownikModle.nazwisko, 
    pesel = model.uzytkownikModle.pesel, 
    nip = model.uzytkownikModle.nip, 
    telefon = model.uzytkownikModle.telefon, 
    adres_zamieszkania = model.uzytkownikModle.adres_zamieszkania, 
    email = model.uzytkownikModle.email, 
    LoginID = newlog.LoginID //<<<---------------- 
}; 

baza.Logowanies.InsertOnSubmit(newlog); 
baza.uzytkowniks.InsertOnSubmit(user); 

baza.SubmitChanges(); 
+0

可能是相同的問題http://stackoverflow.com/questions/5560564/the-insert-statement-conflicted-with-the-foreign-key-constraint-fk-tkosikzbozi – NitWit

+0

假設你有一個FK關係在數據庫 - 您的Linq-to-SQL模型在這兩個實體之間是否也有「鏈接」?例如。用戶對象是否具有某種「登錄」(作爲登錄對象 - 不僅僅是ID)屬性? –

+0

我的Linq到SQL有一個「鏈接」Logowanie.LoginID - > uzytkownik.LoginID' user1031034

回答

0

uzytkownik應該有一個叫Logowanie屬性,你可以設置爲您創建了新的實例,但還沒有提交:

user.Logowanie = newlog; 
+0

非常感謝:)它的工作:D – user1031034

0

因爲它是一個外鍵關係,你Logowanie類應該包含IQueryable<uzytkownik>的屬性,用於以一對多方式正確關聯對象。結果,就不再需要手動分配外鍵,它可以通過對象層次結構來完成:

Logowanie newlog = new Logowanie() 
{ 
    Login = model.LoginModel.Użytkownik, 
    Haslo = model.LoginModel.Hasło, 
    konto = model.LoginModel.Konto 
}; 

uzytkownik user = new uzytkownik() 
{ 
    imie = model.uzytkownikModle.imie, 
    nazwisko = model.uzytkownikModle.nazwisko, 
    pesel = model.uzytkownikModle.pesel, 
    nip = model.uzytkownikModle.nip, 
    telefon = model.uzytkownikModle.telefon, 
    adres_zamieszkania = model.uzytkownikModle.adres_zamieszkania, 
    email = model.uzytkownikModle.email, 
    // Remove this line entirely LoginID = newlog.LoginID //<<<---------------- 
}; 

// Add the child object (user) to your Logowanie object (newlog) 
newlog.uzytkowniks.Add(user) // This may just be uzytkownik. Pluralization in LINQ is weird 

// It is not necessary to queue the user object for insertion 
// the newlog object will do that for you 
baza.Logowanies.InsertOnSubmit(newlog); 
// baza.uzytkowniks.InsertOnSubmit(user); 

// SubmitChanges at this point will insert all of the children 
// of newlog and assign the IDs properly 
baza.SubmitChanges(); 

// at this point you should be able to get the newlog.LoginID 
// and the user.UserID (assuming this is what you called it) 

當我第一次碰到這種運行它似乎有點落後給我,但一旦你將關係分解成他們的類表示,它真的開始有意義。它也很棒,它爲你做所有的關係分配。

+0

以前回答工作,但你太有趣了。 你寫道:「Logowanie類應該包含一個屬性IQueryable 」,這意味着,將此添加到我的Logowanie模型類? 例如public class LoginModel:IQueryable {.....} newlog.uzytkowniks.Add(user) - 我沒有添加屬性...我可以在'Restauracja.uzytkownik'中爲'Add'生成方法存根,但當我運行時我有錯誤: {「對象引用未設置爲對象的實例。」} – user1031034

+0

@ user1031034:否,如果這些類是通過使用DataContext(.dbml文件)創建的,那麼該屬性應該已經當你添加你的表時自動生成。 –