Вы должны иметь некоторую общность в вашем интерфейсе репозитория. Например, вы могли бы это сделать:
public interface IRepository<T>
{
IEnumerable<T> GetList();
void DeleteBatch(IEnumerable<T> entities);
// other methods here
}
где у вас есть:
public interface ICompanyRepository : IRepository<T>
и
public interface IDepartmentRepository : IRepository<T>
Тогда вы можете настроить свой базовый контроллер следующим образом:
public abstract class DataController<TModel> : Controller
{
protected IRepository<TModel> repository;
public DataController(IRepository<TModel> repository)
{
this.repository = repository;
}
[HttpPost]
public ActionResult BatchDelete(long[] ids)
{
var entities = repository.GetList().Where(item => ids.Contains(item.ID));
repository.BatchDelete(entities);
return RedirectToAction("Index");
}
}
ОБНОВЛЕНИЕ Тогда ваш CompanyController будет выглядеть так:
public CompanyController : DataController<Company>
{
public CompanyController(IRepository<Company> repository) : base(repository)
{
}
}
Это поможет.
Еще одно предупреждение: похоже, ваш GetList () получает все объектов из базы данных и затем выбирает тот, который вы хотите удалить, для операции удаления. Лучше извлечь из базы данных только интересующую вас информацию и сохранить значительную производительность.