/ / Entity Framework tworzy duplikaty, jeśli przydzieli obiekt - wpf, entity-framework, unity-container

Entity Framework tworzy duplikaty, jeśli przydzieli obiekt - wpf, entity-framework, unity-container

Witaj! Stworzyłem małą aplikację WPF przy użyciu PRISM i Unity, Entity Framework.

Mam klasę sharedInfo do uzyskiwania dostępu do aktualnie zalogowanego użytkownika, który zapełniam w moim bootstaperze, jeśli baza danych zawiera użytkownika pasującego do szczegółów wprowadzonych przez użytkownika.

Moi użytkownicy mogą tworzyć notatki na temat pewnych podmiotów i chcę wiedzieć, kto utworzył notatkę, aby moja klasa notatek miała właściwość nawigacyjną SystemUser. Jeśli utworzę nową notatkę i ustawię taką właściwość:

note.SytemUser = _unityContainer.Resolve<ISharedInfo>("AppSharedInfo").LoggedInUser;

wtedy, gdy zapiszę szczegóły, otrzymuję nowy systemUser. Nie dzieje się tak, jeśli po prostu ustawię właściwość Id tak:

note.SystemuserId =_unityContainer.Resolve<ISharedInfo>("AppSharedInfo").LoggedInUser.SystemUserId;

Wydaje mi się to niewłaściwe, czy możesz mi powiedzieć, gdzie się tu mylę i co powoduje duplikowanie moich danych użytkownika, jeśli ustawię notatki "Właściwość SystemUser?

Odpowiedzi:

0 dla odpowiedzi № 1

Najprawdopodobniej dodasz note do twojego kontekstu gdzieś tak:

context.Notes.Add(note);

Ta linia nie zawiera tylko znaku note się w Added stan, ale także wszystkie powiązane obiekty note które nie są jeszcze znane instancji kontekstu, czyli powiązanych obiektów, które są w stanie Detached. Aby uniknąć dodania powiązanych jednostek, musisz wyraźnie poinformować EF, że wiesz, że podmiot powiązany już istnieje, dołączając go do kontekstu (w stanie Unchanged) zanim zadzwonisz Add dla note:

context.SystemUsers.Attach(note.SystemUser);
context.Notes.Add(note);