2012-12-14 13 views
5

Utworzono model db z wizualizerem framework encji w Visual Studio. Istnieją 2 tabele (praca, stocktype), które są ze sobą powiązane tabelą stocktype2job.Entity Framework - Utwórz właściwość nawigacji

enter image description here

Job <------- no direct relation/navigation property --------> StockType 
|                 | 
|                 | 
---------------------> StockType2Job -----------------------------> 

z obiektem pracę, mógłby zrobić coś takiego ...

EntitiesObject db = new EntitiesObject(); 
Job job = db.Jobs.SingleOrDefault(j => j.IdJob == 40); 

List<StockType> stockTypes = new List<StockType>; 
foreach (StockType2Job st2j in job.StockType2Jobs) 
    { 
     stockTypes.add(st2j.StockType); 
    } 

To powinno działać dobrze. Ale czy istnieje sposób na stworzenie właściwości nawigacji w jednostce pracy, więc mogę napisać coś takiego?

EntitiesObject db = new EntitiesObject(); 
Job job = db.Jobs.SingleOrDefault(j => j.IdJob == 40); 

List<StockType> stockTypes = job.StockTypes; // <<----- 

Dzięki za życzliwą pomoc Apo

Odpowiedz

2

Jest jasne (z odniesieniem siebie), które StockType2Jobs nie zawiera tylko klucze obce do StockType i pracy, więc nie można mapować wielu-wielu związek z właściwością nawigacji job.StockTypes. Więc nie możesz zrobić nic innego niż zbieranie StockType przez job.StockType2Jobs. Ale to nie jest wielka sprawa:

List<StockType> stockTypes = job.StockType2Jobs.Select(x => x.StockType); 

Można skusić się owinąć to w nieruchomości niezmapowanego job.StockTypes, ale zwykle nie jest to dobry pomysł, aby to zrobić.

1

Spróbuj czegoś takiego:

var stocksTypes = from st in db.StockType 
    from stj in st.StockType2Job where stj.Job.IdJob==40 select st; 
  • Kod ten nie tworzy żadnego nowego właściwość nawigacji, to po prostu "łączenie" tabele. Przypuszczam, że tabela StockType2Jobs istnieje z dobrego powodu.

Polecam, aby rzucić okiem na sposób radzenia sobie z relacją N do N z EF.

Niektóre linki [1][2]

Nadzieja Pomaga

+0

nie ma wątpliwości, że to zadziała, ale raczej nie chcę używać linq, gdy jest bardziej elegancki sposób, ale i tak! –

Powiązane problemy