RemoveDataRecord <TEntity>(int id) - динамически установить TEntity - PullRequest
0 голосов
/ 11 ноября 2011
var repo = new MyRepo();
repo.RemoveDataRecord<MyProj.Data.Person>(5);

Вышеприведенное удаляет запись из таблицы Person в моем хранилище linq to sql.

Это то, что я хотел бы сделать:

var repo = new MyRepo();
repo.RemoveDataRecord<"MyProj.Data.OrderItem">(17);

Цель: каждаяСтраница администратора имеет таблицу записей, и каждая запись имеет ссылку «удалить», которая выглядит следующим образом:

<a href="#" id="17" type="MyProj.Data.OrderItem">delete</a>

Таким образом, я могу получить идентификатор и тип элемента для удаления.

Это возможно?Что-то вроде repo.RemoveDataRecord <"MyProj.Data.OrderItem"> (17);?Я предполагаю, что мне нужно отражение.Спасибо!

1 Ответ

0 голосов
/ 12 ноября 2011

Вы можете попробовать что-то вроде этого:

Во-первых, давайте получим отражение типа вашего объекта:

var targetEntityType = Type.GetType("MyProj.Data.OrderItem");

Затем нам нужно отразить определение общего метода RemoveDataRecord

MethodInfo genericMethodDefinition = typeof(MyRepo).GetMethod("RemoveDataRecord");

Смотрите здесь, как это сделать с помощью рефакции: Есть ли в C # эквивалент typeof для свойств / методов / членов?

И теперь, каждый раз, когда вам нужно вызвать этот метод, вы должны: Получить отражение универсального метода на основе определения универсального метода:

MethodInfo genericMethod = genericMethodDefinition.MakeGenericMethod(targetEntityType);

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

genericMethod.Invoke(repo, new object[] { 17 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...