Я однажды построил базовый контроллер.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
namespace DataAccessLayer.Controllers
{
public class BaseController<TEntity> where TEntity : class, new()
{
public virtual TEntity Get<TContext>(Expression<Func<TEntity, bool>> predicate, TContext context) where TContext : DbContext
{
var item = context.Set<TEntity>().FirstOrDefault(predicate);
return item;
}
public List<TEntity> GetList<TContext>(Expression<Func<TEntity, bool>> predicate, TContext context) where TContext : DbContext
{
var item = context.Set<TEntity>().Where(predicate).ToList();
return item;
}
public IQueryable<TEntity> GetListQueryable<TContext>(Expression<Func<TEntity, bool>> predicate, TContext context) where TContext : DbContext
{
var item = context.Set<TEntity>().Where(predicate);
return item;
}
public List<TEntity> GetAll<TContext>(TContext context) where TContext : DbContext
{
var item = context.Set<TEntity>().ToList();
return item;
}
public IEnumerable<TEntity> GetAllEnumerable<TContext>(TContext context) where TContext : DbContext
{
IEnumerable<TEntity> item = context.Set<TEntity>();
return item;
}
public virtual TEntity Update<TContext>(TEntity input, Expression<Func<TEntity, bool>> predicate, TContext context) where TContext : DbContext
{
if (input == null)
return null;
var existing = context.Set<TEntity>().FirstOrDefault(predicate);
if (existing != null) context.Entry(existing).CurrentValues.SetValues(input);
return existing;
}
public virtual TEntity Insert<TContext>(TEntity input, TContext context) where TContext : DbContext
{
context.Set<TEntity>().Add(input);
return input;
}
}
}
вы используете его, создавая контроллер следующим образом:
public class TaxcController : BaseController<Tax>
{
}
, а затем просто создавая экземпляр. Таким образом, у вас есть контроллер или репо для создания ваших перегрузок или уникальных методов, когда нужно что-то «выключить».
public void dostuff()
{
TaxController taxController = new TaxController();
taxController.Insert(item, context);
}
Это очень полезно при работе с базой данных, которая имеет был построен пьяным программистом в спешке, потому что все, что следует тому же шаблону, может быть использовано, и все, что не может все еще использоваться через контроллер, контроллер просто становится ответственным за "обход" с любыми исключениями там существует в базе данных.
Это всего лишь Po C, вам не обязательно делать это именно так. Просто чтобы начать работать.