gpt4 book ai didi

nhibernate - 使用 nHibernate 和存储库模式,需要一些指导

转载 作者:行者123 更新时间:2023-12-04 07:04:43 26 4
gpt4 key购买 nike

好的,所以我刚刚进入 nhibernate(使用 fluent)。

我喜欢它的一件事是我可以使用存储库模式(从 nhibernate rhino 博客中了解它)。

基本上使用泛型,我可以创建适用于我所有数据库表的方法。

 public interface IRepository<T>
{
T GetById(int id);
ICollection<T> FindAll();
void Add(T entity);
void Remove(T entity);
}


public class Repository<T> : IRepository<T>
{

public ISession Session
{
get
{
return SessionProvider.GetSession();
}
}


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

public ICollection<T> FindAll()
{
return Session.CreateCriteria(typeof(T)).List<T>();
}

public void Add(T t)
{
Session.Save(t);
}

public void Remove(T t)
{
Session.Delete(t);
}

}

然后我继承 Repository 类,然后我可以添加特定于该实体的方法。

在尝试添加 Update 方法时,有人提到 Repository 模式应该作用于集合?我在这里看东西不正确吗?为什么我不能创建更新方法?

我尝试添加一个更新方法,但我对如何处理 session 和更新数据库感到困惑?

我希望每个实体的所有数据库访问都在一个地方,因此 UserRepository 将拥有所有基本的 CRUD,然后可能还有一些其他方法,例如 GetUserByEmail() 等。

最佳答案

不要使用存储库模式——而是使用 UnitOfWork 模式,并将定义的查询 ICriteria 传递给 ISession。本质上,Repo 模式正在包装一些不需要用 NH 包装的东西。

http://ayende.com/Blog/archive/2009/04/17/repository-is-the-new-singleton.aspx欲了解更多信息

关于nhibernate - 使用 nHibernate 和存储库模式,需要一些指导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296767/

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