2009-09-21 22 views
8

W mojej bazy danych mam ... TABLEA, TableB i TableCLINQ tabeli dołączyć z Entity Framework

TableB ma tylko 2 kolumny klucz podstawowy TableA i TableC, więc tak naprawdę definiuje jeden do wielu relacji między dwie tablice

Co chcę zrobić przy użyciu SQL:

SELECT * 
FROM TablesA a 
JOIN TablesB b ON a.AID = b.AID 
WHERE b.BID = 1 

W Entity Framework nie stworzyć TablesB dla mnie zrobić to dołączyć, myślę, bo TableB ma tylko klucze obce!

Jak mogę to zrobić?

+0

http://stackoverflow.com/questions/21051612/entity-framework-join-3-tables –

Odpowiedz

7

Doing łączyć z LINQ jest dość prosta

from a in TablesA 
join b in TablesB 
on a.AID equals b.AID 
into joined 
where b.BID == 1 
select joined 

Myślę, że prawdziwe pytanie może być - dlaczego nie masz klasę jednostki za TablesB? Możemy potrzebować więcej informacji, aby na nie odpowiedzieć.

+0

I myślę, że to dlatego, że TableB składa się z obcych kluczy, więc nie jest pokazywany! –

3

Podczas importowania tabel z bazy danych struktura obiektu pozbywa się tabeli TableB i pokazuje TableA oraz TableC, które mają wiele do wielu relacji. TableA ma właściwość nawigacyjną TableCs i na odwrót. Więc trzeba użyć tych właściwości nawigacyjnych, dla próbki:

var tableARow= db.TableA.First(s => s.Id == 1); 
if (!tableARow.TableCs.IsLoaded) { tableARow.TableCs.Load(); } 

lub

var tableARow= db.TableA.Include("TableCs").First(s => s.Id == 1); 
+0

Dzięki Zdziwiony, że wygląda bardziej jak to. Jeszcze jedna rzecz. W przypadku s.Id == 1, jest to w rzeczywistości identyfikator tableC, który muszę ustawić na 1, a nie TableA. Jak to zrobić? Więc jest to encja TableA, którą chcę zwrócić, ale chcę wypełnić TableC mając TableC.ID = 1 .... sensowne? –

+0

Lista wierszy z tabeli A, które mają wiersze z tabeli C o Id = 1: var tablearows = db.TableC.Include ("TableAs") Gdzie (c => c.Cid == 1). Wybierz (c => c.TableAs) .ToList(); – Puzzled

Powiązane problemy