Borysław
B.
Mgr inżynier
informatyki,
właściciel Matrix
Reliability
Temat: [EF] Edycja entity powiązanego relacją z innym entity
Cześć, naprowadzilibyście mnie? Jestem początkujący i się zgubiłem.Mam entity user i entity user_data, połączone relacją. Jakimś dziwnym trafem po pobraniu (za pomocą LINQ) wybranego obiektu entity, obiekt ten ma status Modified. Zmieniam status ręcznie na Detached bo potrzebuję, żeby mój obiekt miał status detached, aby móc bezpiecznie zapisać zmiany w bazie danych.
private void Detach(user user)
{
ObjectContext context = ((ObjectQuery)((IEntityWithRelationships)user).RelationshipManager.GetAllRelatedEnds().First().CreateSourceQuery()).context;
context.Detach(user.user_data);
context.Detach(user);
}
Ale dzieje się coś dziwnego w momencie edycji rekordów...
private void UpdateRecord()
{
UserRepositryModel userRepositoryModel = new UserRepositryModel();
user vuser;
vuser = _userGroupList.ToList<user>().ElementAt(0);
Detach(vuser);
//po dokonaniu Detach, vuser w miejscu user_data dostaje null
//dlaczego?? Jak podpiąć z powrotem to co EF automatycznie wynulował?
vuser.forename = _forename;
vuser.surname = _surname;
UserRepositoryModel.Edit(vuser);
UserRepositoryModel.Save();
}
W momencie Save() leci taki wyjątek
The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
Patrzyłem na Google, ale tam wyjaśniali, że ten wyjątek leci głównie wtedy, gdy chcemy wykasować z bazy danych jakiś rekord powiązany relacjami z inną tabelą, bez usunięcia danych w tej innej tabeli. Tu jednak ja chcę zmodyfikować rekord, a nie chcę go wcale usunąć.Borysław Bobulski edytował(a) ten post dnia 30.09.11 o godzinie 16:09