如何为每个数据库模型编写一个读取,插入,更新,删除方法?

时间:2015-06-14 14:07:25

标签: c# asp.net-mvc entity-framework generics interface

我总是要在MVC中为每个模型编写四种方法(读取,插入,更新,删除)
我需要知道是否有更好的方法来编写更少的代码并使用一些C#功能,如接口,泛型类型,我不知道......等等。 并且我们说这些表格映射到ADO.Net实体数据模型生成的相应模型。

enter image description here

1 个答案:

答案 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
}