Προσπαθώ να μεταφέρω ένα σενάριο SQL πολλαπλών temporary tables πάνω στα οποία κάνω μια σειρά από inner joints, σε LINQtoSQL
Αντί για πολλαπλά tables λοιπόν έχω πολλαπλά collections με το SQL από
select Μπλα μπλα
from (((((Table1
inner join #col1 on #col1.to_1_ID = Table1_ID)
inner join #col2 on #col2.to_1_ID = Table1_ID)
inner join #col3 on #col3.to_1_ID = Table1_ID)
inner join #col4 on #col4.to_1_ID = Table1_ID)
inner join #col5 on #col5.to_1_ID = Table1_ID)
inner join #col6 on #col6.to_1_ID = Table1_ID
γίνεται σε κώδικα:
var simple = from t1 in dbContext.Table1
join col1 in Collection1 on Table1.Table1_ID equals col1.to_1_ID
join col2 in Collection2 on Table1.Table1_ID equals col2.to_1_ID
join col3 in Collection3 on Table1.Table1_ID equals col3.to_1_ID
join col4 in Collection4 on Table1.Table1_ID equals col4.to_1_ID
join col5 in Collection5 on Table1.Table1_ID equals col5.to_1_ID
join col6 in Collection6 on Table1.Table1_ID equals col6.to_1_ID
select new {Μπλα μπλα}
Εκτελώντας το SQL στον SQL server, το αποτέλεσμα εμφανίζεται άμεσα. Εκτελώντας το LINQ κομμάτι μετά από ένα λεπτό τρώω στην μάπα Connection Timeout.
Αν όμως αλλάξω το LINQ ώστε κάθε collection να αναφέρεται στο κλειδί μέσω των entity references, και όχι με το δικό του foreign key:
var simple = from t1 in dbContext.Table1
join col1 in Collection1 on Table1.Table1_ID equals col1.to_1_ID
join col2 in Collection2 on col1.Table1.Table1_ID equals col2.to_1_ID
join col3 in Collection3 on col2.Table1.Table1_ID equals col3.to_1_ID
join col4 in Collection4 on col3.Table1.Table1_ID equals col4.to_1_ID
join col5 in Collection5 on col4.Table1.Table1_ID equals col5.to_1_ID
join col6 in Collection6 on col5.Table1.Table1_ID equals col6.to_1_ID
select new {Μπλα μπλα}
τότε δουλεύει κανονικά.
Γιατί συμβαίνει αυτό??