将值插入外键

时间:2011-11-05 15:17:02

标签: c# asp.net database asp.net-mvc-3 foreign-keys

问题在于外键:

  

INSERT语句与FOREIGN KEY约束“FK_uzytkownik_Logowanie”冲突。冲突发生在数据库中   “Restauracja”,表“dbo.Logowanie”,栏目“LoginID”。
  声明已经终止。

我使用断点进行检查,并在断点(正在运行的应用程序)之后添加Logowanie表中的主键

baza.SubmitChanges();

LoginID期间会自动添加logowanie表格中SubmitChanges的主键。

如何在LoginID表中将logowanie的值从LoginID表复制到uztkownik?我在这里添加了外键值,但这里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();

2 个答案:

答案 0 :(得分:0)

uzytkownik应该有一个名为Logowanie的属性,您可以将其设置为您创建但尚未提交的新实例:

user.Logowanie = newlog;

答案 1 :(得分: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)

当我第一次遇到这个时,对我来说似乎有些落后,但是一旦你把关系分解成他们的班级表示,它真的开始变得有意义了。它为你做所有关系任务也很棒。

相关问题