2011-09-09 13 views
7

(Lưu ý, đoạn mã dưới đây chỉ là ví dụ. Xin vui lòng không bình luận về lý do tại sao điều này là cần thiết. Tôi sẽ đánh giá cao một câu trả lời dứt khoát CÓ hoặc KHÔNG, như thể nó có thể sau đó như thế nào? câu hỏi là mơ hồ cho tôi cũng biết cám ơn)Làm thế nào tôi có thể lấy ObjectSet <T> từ Entity-Framework ở thời gian chạy khi T là động?

Ví dụ, tôi có thể nhận ObjectSet < T> dưới đây:.!

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

Đoạn mã trên công trình okay. Tuy nhiên, tôi cần bảng thực thể là động nên tôi có thể chuyển đổi giữa các loại. Một cái gì đó như dưới đây.

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

Nhưng mã ở trên sẽ không biên dịch.

[EDIT:] Những gì tôi muốn là một cái gì đó tương tự, hoặc bất cứ điều gì tương tự:

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

thể trùng lặp của (http://stackoverflow.com/questions/ 232535 ​​/ cách sử dụng-phản ánh-to-gọi-generic-phương pháp) – nawfal

Trả lời

4

Bạn có thể sử dụng ví dụ ở đây trong 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

Tôi đã tìm thấy câu trả lời ở đây , http://geekswithblogs.net/seanfao/archive/2009/12/03/136680.aspx. Điều này rất tốt vì nó loại bỏ việc có nhiều đối tượng kho lưu trữ cho mỗi bảng được ánh xạ bởi EF đặc biệt cho các hoạt động trần tục như CRUD, đó chính xác là những gì tôi đang tìm kiếm.

+1

Đó là lý do tại sao điều này hoàn toàn là OT: "Xin đừng bình luận về lý do tại sao điều này là cần thiết." Nếu bạn chỉ mô tả lý do tại sao nó là cần thiết bạn có thể có câu trả lời ngay lập tức. Ngoài ra, hãy kiểm tra điều này: http://stackoverflow.com/questions/5625746/generic-repository-with-ef-4-1-what-is-the-point/5626884#5626884 Kho lưu trữ chung là mẫu không chính xác - nó chỉ hữu ích như cơ sở cho kho lưu trữ cụ thể: http://stackoverflow.com/questions/7110981/the-repository-itself-is-not-usually-tested Các câu hỏi liên quan là về API DbContext nhưng nó giống với API của ObjectContext. –

+0

Đó là một liên kết rất tốt. Cảm ơn. – Ronald

6

Tôi đã có làm việc này với các tinh chỉnh sau đây để những gợi ý ở trên: [? Làm thế nào để sử dụng phản ánh để gọi Phương pháp chung chung]

var type = Type.GetType(myTypeName); 
var method = _ctx.GetType().GetMethod("CreateObjectSet", Type.EmptyTypes); 
var generic = method.MakeGenericMethod(type); 
dynamic objectSet = generic.Invoke(_ctx, null); 
Các vấn đề liên quan