Mam ograniczenie klucza obcego między tabelami Sesje i użytkownicy. W szczególności Sessions.UID = Users.ID. Czasami chcę, aby Sesje.UID były puste. Czy to może być dozwolone? Za każdym razem, gdy próbuję to zrobić, otrzymuję naruszenie ograniczeń FK.SQL Server 2005: zerowalny klucz obcy
W szczególności wstawiam wiersz do Sesji przez LINQ. Ustawiłem Session.User = null; i otrzymuję ten błąd:
An attempt was made to remove a relationship between a User and a Session. However, one of the relationship's foreign keys (Session.UID) cannot be set to null.
Jednak, kiedy usunąć wiersz null właściwość użytkownika, otrzymuję ten błąd na moim SubmitChanges line:
Value cannot be null. Parameter name: cons
Żaden z moich tabelach pole zwanych wad ", ani w moim pliku 5,500-wierszowym DataContext.designer.cs, ani nie jest w QuickWatch dla żadnego z powiązanych obiektów, więc nie mam pojęcia, jakie są" minusy ".
W bazie danych Session.UID jest polem z wartościami zerowymi, a User.ID jest int non-null. Chcę nagrywać sesje, które mogą mieć lub nie mieć UID, i wolałbym to zrobić bez wyłączania ograniczenia dla tej relacji FK. Czy jest jakiś sposób na zrobienie tego?
Prawy ad. +1 Definicja klucza obcego polega na tym, że jest to wartość w jednej tabeli, która musi być zgodna z wartością klucza podstawowego w innej tabeli lub mieć wartość null. – Alan
Logicznie rzecz biorąc, ma to sens, prawda? Przeczytałem to tak: JEŚLI próbuję odwołać się do rekordu w innej tabeli, upewnij się, że odniesienie jest prawidłowe. Jeśli nie (NULL), kogo to obchodzi. –