Как я могу получить ObjectSet <T>из Entity-Framework во время выполнения, где T является динамическим? - PullRequest
7 голосов
/ 09 сентября 2011

(Обратите внимание, приведенный ниже код является лишь примерами. Пожалуйста, не комментируйте, почему это необходимо. Я был бы признателен за точный ответ ДА ​​или НЕТ, например, если это возможно, то как?Если вопрос неопределенный, дайте мне знать. Спасибо!)

Пример, я могу получить ObjectSet <<em> T > ниже:

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

Код выше работает хорошо,Однако мне нужно, чтобы таблица сущностей была динамической, чтобы я могла переключаться между типами.Что-то вроде ниже.

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

Но приведенный выше код не скомпилируется.

[РЕДАКТИРОВАТЬ:] То, что я хотел бы, это что-то вроде, или что-то похожее:

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

Ответы [ 3 ]

6 голосов
/ 04 июля 2012

У меня есть эта работа со следующей настройкой к предложениям выше:

var type = Type.GetType(myTypeName);
var method = _ctx.GetType().GetMethod("CreateObjectSet", Type.EmptyTypes);
var generic = method.MakeGenericMethod(type);
dynamic objectSet = generic.Invoke(_ctx, null);
4 голосов
/ 09 сентября 2011

Можете ли вы использовать пример здесь в Как использовать отражение для вызова универсального метода?

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 голосов
/ 09 сентября 2011

Я нашел ответ здесь, http://geekswithblogs.net/seanfao/archive/2009/12/03/136680.aspx. Это очень хорошо, потому что устраняет необходимость иметь несколько объектов репозитория для каждой таблицы, отображаемой EF, особенно для таких мирских операций, как CRUD, что я и искал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...