Используя отражение, вызовите метод поля для объекта, который уже существует - PullRequest
5 голосов
/ 11 февраля 2012

У меня есть экземпляр класса AccessData, который наследуется от DbContext. Итак, это первый контекстный класс кода Entity Framework и выглядит следующим образом ...

public class AccessData : DbContext
{
    public DbSet<apps_Apps> apps_AppsList;
    public DbSet<apps_AppsOld> apps_AppsOldList;
    ...
    //Several other DbSet<> properties
}

Используя Reflections, я определил одно из этих свойств DbSet для объекта AccessData, как это ...

var listField = accessData.GetType().GetField(typeName + "List");

Теперь мне нужно добавить объекты в это свойство DbSet.

Учитывая, что у меня есть только объект FieldInfo, представляющий поле DbSet, как я могу вызвать метод Add этого конкретного поля для объекта AccessData и передать объект?

Или другими словами, как мне назвать следующее?

accessData.<FieldInfoType>.Add(obj);

Надеюсь, это имеет смысл.

1 Ответ

8 голосов
/ 11 февраля 2012

Получить значение поля:

object fldVal = listField.GetValue(accessData);

Получить MethodInfo для метода, который вы хотите вызвать:

MethodInfo addMethod = fldVal.GetType().GetMethod("Add", new Type[] { typeof(obj) });

И вызвать его:

addMethod.Invoke(fldVal, new object[] { obj });

Или, если вы используете .NET 4, вы можете использовать новое ключевое слово dynamic, чтобы упростить последние 2 шага:

dynamic fldVal = listField.GetValue(accessData);
fldVal.Add(obj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...