加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何构建通用存储库

发布时间:2020-12-16 07:34:50 所属栏目:asp.Net 来源:网络整理
导读:我正在使用NHibernate在ASP.NET MVC中开发一个Web应用程序. 根据我在Google上发现的文章和教程,我正在为我的课程使用Repository. 我有10个类和10个存储库.今天我发现除了班级以外,90%的矿藏都是完全相同的.这是一个例子: public class PromocaoRepository:
我正在使用NHibernate在ASP.NET MVC中开发一个Web应用程序.

根据我在Google上发现的文章和教程,我正在为我的课程使用Repository.

我有10个类和10个存储库.今天我发现除了班级以外,90%的矿藏都是完全相同的.这是一个例子:

public class PromocaoRepository:IPromocaoRepository {
    private ISession Session;

    public PromocaoRepository() {
        this.Session = NHibernateSessionFactory.OpenSession();
    }

    public void Add(Promocao promocao) {
        using(ITransaction transaction = this.Session.BeginTransaction()) {
            this.Session.Save(promocao);
            transaction.Commit();
        }
    }

    public void Edit(Promocao promocao) {
        using(ITransaction transaction = this.Session.BeginTransaction()) {
            this.Session.Update(promocao);
            transaction.Commit();
        }
    }

    public void Remove(Promocao promocao) {
        using(ITransaction transaction = this.Session.BeginTransaction()) {
            this.Session.Delete(promocao);
            transaction.Commit();
        }
    }

    public Promocao GetById(int id) {
        return this.Session.Get<Promocao>(id);
    }

}

有一种方法可以做我可以在我所有课程中使用的通用存储库吗?

如果可能的话,如果我需要为特定类创建特定方法,我该怎么办?

解决方法

您应该创建一个通用存储库,您可以在一般情况下使用它,如果特定类需要任何额外的方法,请使用继承添加它.使用你的例子:

public class GenericRepository<TEntity> :IGenericRepository<TEntity> {
    private ISession Session;

    public GenericRepository() {
        this.Session = NHibernateSessionFactory.OpenSession();
    }

    public void Add(TEntity instance) {
        using(ITransaction transaction = this.Session.BeginTransaction()) {
            this.Session.Save(instance);
            transaction.Commit();
        }
    }

    /* other methods */ 
}

public class SpecificRepository : GenericRepository<SpecificEntity>,ISpecificRepository 
{
    public void SpecialQuery()  { /* added method implementation */ }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读