2011-11-05 122 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文件)创建的,那么该属性应该已经当你添加你的表时自动生成。 –