2011-02-10 7 views
5

Mam usługę sieciową, która używa Entity Framework do przechowywania i udostępnia publiczny API dla operacji CRUD.Jak zwrócić obiekt, który jest zapytaniem wielu tabel

Jeśli mam podmiot, taki jak Użytkownik, który ma 1 do wielu relacji z jednostką Car, jak mogę łatwo zwrócić w mojej metodzie usługi sieciowej GetUser (int userId) instancję użytkownika, która wygląda następująco:

public class User{ 
    string Id; 
    IEnumberable<Car> Cars; 
} 

Czy to działa domyślnie w ramach struktury encji, ponieważ zakładam, że właściwość Cars jest leniwy, gdy używa się go po stronie serwera.

+0

Czy klasa "Użytkownik" jest powyżej czegoś odrębnego od rzeczywistego typu jednostki użytkownika? –

Odpowiedz

2

Obiekty obiektów można przekształcać do postaci szeregowej, a otrzymasz automatycznie właściwość Samochody.

Jednak w zależności od zapytania LINQ właściwość Cars mogła zostać załadowana lub nie. Jeśli zawsze chcesz wczytać właściwość Cars w ramach danej metody internetowej, należy jawnie załadować tę właściwość. Poniżej znajduje się kilka sposobów, aby zagwarantować, że załadujesz nieruchomość Cars.

1) użyj metody Uwzględnij ("Samochody") w zapytaniu LINQ.

2) użyj projekcji.

3) Jawnie załaduj właściwość Cars na wystąpienie obiektu użytkownika. Na przykład,

userA.Cars.Load() 
0

Użyłem LINQ-To-SQL, aby osiągnąć podobny wynik, a dla mnie "po prostu zadziałało". Wypróbuję to i zobaczę co się stanie. Może być konieczne jawne zdefiniowanie [DataContract] na przedmiotach.

2

Przede wszystkim powinieneś [Include] samochodów w definicji metadanych User podmiotu. Prawdopodobnie również musisz przepisać metodę getUsers(), aby wypełnić samochody. Coś takiego.

public IQueryable<User> GetUsers() 
{ 
    return this.ObjectContext.User.Include("Cars"); 
} 

Niełatwo wyjaśnić krótko, polecam odwiedzić this i this stron internetowych.

Nadzieja pomaga!

Powiązane problemy