я задал вопрос о ASP.NET MVC Generic Controller и this answer показывает контроллер, как это:Как использовать ASP.NET MVC Generic Controller для заполнения правильной модели
public abstract class GenericController<T> where T : class { public virtual ActionResult Details(int id) { var model = _repository.Set<T>().Find(id); return View(model); } }
который может быть реализован, как это ,
public class FooController : GenericController<Foo> { }
Теперь, когда кто-то просит/Foo/Детали/42, то entitiy вытягивается из _repository-х
Set<Foo>()
, не имея ничего писать для этого вFooController
.
, как он объясняет, что это хорошо, но думаю, что я хочу, чтобы разработать универсальный контроллер для продукта и клиента, где я не буду использовать EF, чтобы загрузить продукт & модель клиента достаточно использовать блок приложения для доступа к данным MS.
public abstract class GenericController<T>
where T : class
{
public virtual ActionResult Details(int id)
{
//var model = _repository.Set<T>().Find(id);
var model =customer.load(id);
or
var model =product.load(id);
return View(model);
}
}
Так что, когда приходит запрос как /Customer/Details/42 or /product/Details/11
затем подробно метод родового контроллера будет вызывать, но как мы можем обнаружить, что запрос исходит от того, какого контроллера и, соответственно, создать экземпляр класса правильно загрузить подходящую модель.
Если запрос приходит для Клиента, тогда мне нужно загрузить данные клиента из метода подробных действий или если запрос поступит на продукт, тогда мне нужно загрузить информацию о продукте из метода действия детали общего контроллера.
Как использовать обобщения для получения набора данных типа T
с блоком данных Entity Framework?
Какова цель универсального контроллера? –
Вам нужно будет показать код, в котором вы инициализируете блок данных в контроллере, который в настоящее время работает. Дело в том, что вы не можете получить модель по типу; вы можете вернуть свой репозиторий. Вот что вы можете использовать метод Entity Frameworks 'DbContext.Set()', поэтому ваш универсальный контроллер _doesn't_ знает во время компиляции, какую конкретную модель он вернет. Мы можем показать пример для блока данных, но это делается проще всего, если вы покажете свой текущий код. –
CodeCaster