2009-08-11 7 views
25

Widzę na moim diagramie EF wiele z tych właściwości nawigacyjnych, ale nie wiem, do czego naprawdę służą. Jak widzę w wielu moich tabelach mam właściwości aspnet_Users.Do czego służą właściwości nawigacji w Entity Framework?

Do czego służą? Czy pomagają w łączeniach? albo co?

Error 2 
Error 3007: Problem in Mapping Fragments starting at lines 1201, 1423: 
Non-Primary-Key column(s) [Field2] are being mapped in both fragments 
to different conceptual side properties - data inconsistency is possible 
because the corresponding conceptual side properties can be independently 
modified. 

Odpowiedz

44

Właściwość nawigacji pozwala na nawigację (duh!) Z jednego obiektu do "połączonego" obiektu.

E.g. jeśli użytkownik jest podłączony do roli, można użyć nawigacji "Rola", aby odczytać i sprawdzić rolę powiązaną z użytkownikiem.

EDIT:

Jeśli chcesz załadować użytkownikowi LINQ-podmioty, a także spojrzeć na jego własności „Rola” nawigacji, trzeba jawnie zawierać „rolę” podmiot w zapytaniu LINQ - EF robi NOT załaduj automatycznie te właściwości nawigacji.

// load user no. 4 from database 
    User myUser = from u in Users.Include("Role") 
       where u.ID = 4 
       select u; 

    // look at the role the user has 
    string roleName = myUser.Role.Name; 

OR:

// load user no. 4 from database 
    User myUser = from u in Users 
       where u.ID = 4 
       select u; 

    // check to see if RoleReference is loaded, and if not, load it 
    if(!myUser.RoleReference.IsLoaded) 
    { 
     myUser.RoleReference.Load(); 
     // now, the myUser.Role navigation property should be loaded and available 
    } 

    // look at the role the user has 
    string roleName = myUser.Role.Name; 

Jest to w zasadzie programowym odpowiednikiem relacji klucza obcego w bazie danych - połączenie między dwoma obiektami. Zasadniczo "ukrywa" lub rozwiązuje sprzężenie między dwiema tabelami (lub dwoma elementami, w języku EF).

Marc

+0

Ah Mam problemy z dodając kilka pól. Jak mam tabelę (pozwala wywołać TABLEA) Tabela A ma 2 pola (pole 1 i pole 2). Mój aspnet_userTable ma wszystkie standardowe pola członkowskie asp.net oraz Pola 1 i Pole 2. kiedy idę i próbuję dodać nowego użytkownika do aspnet_userTable Nie widzę Field1 ani Field2. Tak więc spróbowałem zrobić to w dwóch krokach najpierw do aspnet_Users.Createaspnet_Users(), a następnie zapisz to w tabeli aspnet_Users (pozwala wywołać to użytkownik). Potem próbowałem user.Field1 = "coś" to działa. następnie wypróbowałem user.Field2 (nie znaleziono żadnej właściwości). Widzę, że ma to jednak – chobo2

+1

user.TableA.Field1 i user.TableA.Field2, ale kiedy próbuję ustawić to po prostu dostaję jakiś zerowy błąd odniesienia. Co robię źle? – chobo2

+0

Cóż, masz błędne skojarzenia - jeśli dodasz do systemu nową tabelę "TableA" i utworzysz relację klucza obcego z "aspnet_user", to twój obiekt "TableA" będzie miał relację (właściwość navigation) do "aspnet_User " - nie na odwrót. Tak więc w jednostce "TableA" powinna istnieć właściwość nawigacji "aspnet_User". –