简体   繁体   English

将值插入外键

[英]insert value to foreign key

problem is with foreign key: 问题在于外键:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_uzytkownik_Logowanie". INSERT语句与FOREIGN KEY约束“ FK_uzytkownik_Logowanie”冲突。 The conflict occurred in database "Restauracja", table "dbo.Logowanie", column 'LoginID'. 数据库“ Restauracja”的表“ dbo.Logowanie”的列“ LoginID”中发生了冲突。
The statement has been terminated. 该语句已终止。

I check this using breakpoints, and primary key in Logowanie table was added when breakpoints (running application) was after 我使用断点进行检查,并在断点(正在运行的应用程序)之后添加了Logowanie表中的主键

baza.SubmitChanges();

Primary key of LoginID in logowanie table is added automatically during SubmitChanges . 的主键LoginIDlogowanie表过程中自动添加SubmitChanges

How to copy value of LoginID from logowanie table to LoginID in uztkownik table? 如何复制的价值LoginIDlogowanieLoginIDuztkownik表? I add foreign key value here, but here LoginID hasn't value yet. 我在此处添加外键值,但此处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;

Since it's a foreign key relationship, your Logowanie class should contain a property for IQueryable<uzytkownik> that is used to relate the objects properly in a one-to-many manner. 由于它是外键关系,因此您的Logowanie类应包含IQueryable<uzytkownik>的属性,该属性用于以一对多的方式正确关联对象。 As a result, there is no longer a need to assign the foreign key manually, it can be done through the object heirarchy: 结果,不再需要手动分配外键,可以通过对象继承来完成:

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)

When I first ran across this it seemed a little backward to me, but once you break the relationships down into their class representations it really starts to make sense. 当我第一次遇到这个问题时,对我来说似乎有点倒退,但是一旦将这些关系分解为它们的类表示形式,它便开始变得有意义。 It's also fantastic that it does all of the relationship assignments for you. 它为您完成所有关系分配也很神奇。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM