向外键插入值

本文关键字:插入 | 更新日期: 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)

当我第一次看到这个的时候,它对我来说似乎有点落后,但是一旦你把关系分解成它们的类表示,它就真的开始有意义了。它还为你完成了所有的关系分配。