2010-12-07 11 views
0

Ist das möglich?Können Sie eine enity-Framework-Tabelle/-Sammlung als Parameter in eine Funktion (asp.net/C#) übergeben

using (Entities db = new Entities()) 
{ 
    LoadDropDownList(ddlFirst, db.MyTable , (bool)(myMember.Id == 0), (int)myMember.RevenueRangeID); 
    LoadDropDownList(ddlSecond, db.OtherTable , (bool)(myMember.Id == 0), (int)myMember.OtherID); 

} 

Ich stolpere auf dem, was der Typ des zweiten Parameters sein sollte - ich im Wesentlichen in der Entity-Framework-‚table‘ passieren versuche in eine generische Routine, die das Dropdownlist mit Daten aus dem ‚MyTable‘ lädt Tabelle mit benutzerdefinierter Logik/Filterung.

Da ich für 6 verschiedene Dropdownlisten/Tabellen Combos das Gleiche mache, wollte ich eine generische Funktion verwenden, um dies zu erreichen.

Antwort

1

Der zugrunde liegende Typ Ihrer Tabellen ist ObjectSet (Oder DbSet wenn Sie CodeFirst verwenden):

public void LoadDropDownList<T>(DropDownList dropDown, ObjectSet<T> table, 
    bool isNew, int otherId) 
{ 
    // Do something 
} 
2

Hier ist, was ich tun würde:

using(Entities db = new Entities()) 
{ 
    LoadDropDownList(ddlReferralType, db.TheTable.ToList(), (bool)(myMember.Id ==0), (int)myMember.RevenueRangeID); 
} 

Dies zwingt die Tabelle aufgezählt werden und in eine List<TMyTableEntity> umgewandelt. Das Problem bei der direkten Übergabe der Tabelle besteht darin, dass Entity Framework die Ausführung deaktiviert, dh die Tabelle darf nicht abgefragt werden, bis nach der ObjectContext (Entities db) bereits entsorgt wurde.

Was Type der db.TheTable ist, hängt davon ab, wie Sie Ihre EF-Code-Generation konfiguriert haben. Aber es ist wahrscheinlich entweder ein ObjectSet<T> oder ein ObjectQuery<T>.

Verwandte Themen