好吧,所以你必须创建一个清晰的 IRepository 并使其尽可能简单,如下所示(因为你想要这个通用):
信息库:
public interface IRepository<T>
{
void Add(T entity);
void Delete(T entity);
void Delete(int id);
T GetById(int id);
IEnumerable<T> GetAll();
void Update(T entity);
void save();
}
并创造One通用存储库如下:
public class Repository<T> : IRepository<T>
where T : EntityBase
{
internal MyDbContext context;
internal DbSet<T> dbSet;
public Repository()
{
context = new MyDbContext();
this.dbSet = context.Set<T>();
}
public void Add(T entity)
{
dbSet.Add(entity);
}
public void Delete(T entity)
{
dbSet.Remove(entity);
}
public void Delete(int id)
{
dbSet.Remove(dbSet.Find(id));
}
public T GetById(int id)
{
return dbSet.Find(id);
}
public IEnumerable<T> GetAll()
{
return dbSet.AsEnumerable();
}
public void Update(T entity)
{
dbSet.Attach(entity);
context.Entry(entity).State = EntityState.Modified;
}
public void save()
{
context.SaveChanges();
}
}
EntityBase 的好处是,因为您的所有属性都有一个 id,所以您可以轻松地像这样:
public class EntityBase
{
public int id { get; set; }
}
然后将其实施到您的Models :
public class Example : EntityBase
{
public byte RecordStatus { get; set; }
public string RecordStatusDescription { get; set; }
public string CreatedBy { get; set; }
public DateTime CreatedDateTime { get; set; }
public string CreatorIPAddress { get; set; }
public string ModifiedBy { get; set; }
public DateTime ModifiedDateTime { get; set; }
public string ModifierIPAddress { get; set; }
public string RemovedBy { get; set; }
public string RemovedDateTime { get; set; }
public string RemoverIPAddress { get; set; }
public bool IsRemoved { get; set; }
}
使用这个简单存储库的优点是您可以轻松地用它做任何事情,例如:
public class HomeController : Controller
{
Repository<Example> _repository = new Repository<Example>();
public ActionResult Index()
{
vm.Example = _repository.GetAll()
.Where(x => x.RecordStatusDescription == "1").ToList();
return View("index",vm);
}
}