2011-09-09 10 views
7

(Uwaga: poniższy kod jest tylko przykładem, proszę nie komentować, dlaczego jest to konieczne.) Byłbym wdzięczny za ostateczną odpowiedź TAK lub NIE, tak jakby to było możliwe, to jak? Jeśli nie, to też jest w porządku. pytanie jest niejasne, daj mi znać, także dzięki)Jak mogę uzyskać ObjectSet <T> z Entity-Framework w czasie wykonywania, gdzie T jest dynamiczne?

przykład, mogę dostać ObjectSet < T> poniżej:.!

ObjectSet<Users> userSet = dbContext.CreateObjectSet<Users>(); 
ObjectSet<Categories> categorySet = dbContext.CreateObjectSet<Categories>(); 

powyższy kod działa w porządku. Potrzebuję jednak dynamicznej tabeli encji, aby móc przełączać się między typami. Coś jak poniżej.

//var type = typeof(Users); 
var type = typeof(Categories); 
Object<type> objectSet = dbContext.CreateObjectSet<type>(); 

Powyższy kod nie zostanie skompilowany.

[EDIT:] Co chciałbym to coś, lub coś podobnego:

//string tableName = "Users"; 
string tableName = "Categories"; 
ObjectSet objectSet = dbContext.GetObjectSetByTableName(tablename); 
+0

możliwe duplikat (http://stackoverflow.com/questions/ 232535 ​​/ how-to-use-reflection-to-call-generic-method) – nawfal

Odpowiedz

4

można użyć przykład tutaj w How do I use reflection to call a generic method?

var type = typeof(Categories); // or Type.GetType("Categories") if you have a string 
var method = dbContext.GetType.GetMethod("CreateObjectSet"); 
var generic = method.MakeGenericMethod(type); 
generic.Invoke(dbContext, null); 
0

znalazłem odpowiedź tutaj , http://geekswithblogs.net/seanfao/archive/2009/12/03/136680.aspx. Jest to bardzo dobre, ponieważ eliminuje konieczność posiadania wielu obiektów repozytorium dla każdego stołu mapowanego przez EF, szczególnie w przypadku zwykłych operacji takich jak CRUD, czego właśnie szukałem.

+1

Dlatego właśnie było to OT: "Proszę nie komentować, dlaczego jest to konieczne." Jeśli właśnie opisałeś, dlaczego jest to konieczne, możesz natychmiast otrzymać tę odpowiedź. Sprawdź również: http://stackoverflow.com/questions/5625746/generic-repository-with-ef-4-1-what-is-the-point/5626884#5626884 Generyczne repozytorium jest niepoprawnym wzorem - jest użyteczne tylko jako baza dla określonego repozytorium: http://stackoverflow.com/questions/7110981/the-repository-self-is-not-usually-teded Podobne pytania dotyczą interfejsu API DbContext, ale jest taki sam z ObjectContext API. –

+0

To bardzo dobry link. Dzięki. – Ronald

6

mam tej pracy z następującym dopracowujemy sugestii powyżej: [? Jak używać odbicie zadzwonić metoda rodzajowa]

var type = Type.GetType(myTypeName); 
var method = _ctx.GetType().GetMethod("CreateObjectSet", Type.EmptyTypes); 
var generic = method.MakeGenericMethod(type); 
dynamic objectSet = generic.Invoke(_ctx, null); 
Powiązane problemy