gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:27:40 24 4
gpt4 key购买 nike

我正在使用 NHibernate 在 ASP.NET MVC 中开发一个 Web 应用程序。

根据我在 Google 找到的文章和教程,我将 Repository 用于我的类(class)。

我有 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);
}

}

有一种方法可以做一种我可以在所有类(class)中使用的通用存储库吗?

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

最佳答案

来自 another thread :

public interface IRepository<T> : IQueryable<T>
{
void Add(T entity);
T Get(Guid id);
void Remove(T entity);
}

public class Repository<T> : IQueryable<T>
{
private readonly ISession session;

public Repository(ISession session)
{
session = session;
}

public Type ElementType
{
get { return session.Query<T>().ElementType; }
}

public Expression Expression
{
get { return session.Query<T>().Expression; }
}

public IQueryProvider Provider
{
get { return session.Query<T>().Provider; }
}

public void Add(T entity)
{
session.Save(entity);
}

public T Get(Guid id)
{
return session.Get<T>(id);
}

IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}

public IEnumerator<T> GetEnumerator()
{
return session.Query<T>().GetEnumerator();
}

public void Remove(T entity)
{
session.Delete(entity);
}
}
  • Wrapping up nHibernate in repositories

    话虽如此,你应该看看S#arp Architecture ,它已经帮助您使用依赖注入(inject)来完成这个重复的过程。
  • 关于asp.net-mvc - 如何构建通用存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3816576/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com