我总是要在MVC中为每个模型编写四种方法(读取,插入,更新,删除)。
我需要知道是否有更好的方法来编写更少的代码并使用一些C#功能,如接口,泛型类型,我不知道......等等。
并且我们说这些表格映射到ADO.Net实体数据模型生成的相应模型。
答案 0 :(得分:1)
对于简单的CRUD逻辑,您可以使用通用存储库模式。这是一个例子:
interface IRepository<T> where T: class
{
List<T> GetAll();
void Add(T entity);
void Update(T entity);
void Remove(T entity);
}
使用Entity Framework实现(将DbContext替换为您的上下文类):
class GenericRepository<T>: IRepository<T> where T: class
{
public virtual List<T> GetAll()
{
using(var context = new DbContext())
{
return content.Set<T>().ToList();
}
}
public virtual void Add(T entity)
{
using(var context = new DbContext())
{
context.Entry(entity).State = EntityState.Added;
context.SaveChanges();
}
}
public virtual void Update(T entity)
{
using(var context = new DbContext())
{
context.Entry(entity).State = EntityState.Modified;
context.SaveChanges();
}
}
public virtual void Remove(T entity)
{
using(var context = new DbContext())
{
context.Entry(entity).State = EntityState.Deleted;
context.SaveChanges();
}
}
}
所有方法都是虚拟的,因此您可以根据需要覆盖它们。您可以直接使用此存储库(不建议使用),也可以将其子类化为特定类型:
class UserRepository: GenericRepository<User>
{
// other query methods here
}