вставить значение во внешний ключ - PullRequest
1 голос
/ 05 ноября 2011

проблема связана с внешним ключом:

Оператор INSERT вступил в конфликт с ограничением FOREIGN KEY "FK_uzytkownik_Logowanie".Конфликт произошел в базе данных «Restauracja», таблице «dbo.Logowanie», столбце «LoginID».
Оператор был прекращен.

Я проверяю это, используя точки останова и первичный ключ в *Таблица 1008 * была добавлена, когда точки останова (запущенное приложение) были после

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 голосов
/ 05 ноября 2011

Поскольку это отношение внешнего ключа, ваш класс 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 голосов
/ 05 ноября 2011

uzytkownik должен иметь свойство Logowanie, которое вы можете установить для нового экземпляра, который вы создали, но еще не отправили:

user.Logowanie = newlog;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...