向外键插入值
本文关键字:插入 | 更新日期: 2023-09-27 18:13:47
外键问题:
INSERT语句与外键约束FK_uzytkownik_Logowanie冲突。数据库发生冲突"Restauracja",桌子"dbo"。,列'LoginID'.
语句已被终止。
我使用断点检查这一点,当断点(运行的应用程序)在
之后时,Logowanie
表中的主键被添加。baza.SubmitChanges();
logowanie
表中LoginID
的主键在SubmitChanges
时自动添加。
如何将logowanie
表中LoginID
的值复制到uztkownik
表中的LoginID
?我在这里添加了外键值,但是这里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();
uzytkownik应该有一个名为Logowanie的属性,您可以将其设置为您创建但尚未提交的新实例:
user.Logowanie = newlog;
因为它是一个外键关系,您的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)
当我第一次看到这个的时候,它对我来说似乎有点落后,但是一旦你把关系分解成它们的类表示,它就真的开始有意义了。它还为你完成了所有的关系分配。