好吧,我只是进入nhibernate(使用流利)。我喜欢它的原因使用nHibernate和存储库模式,需要一些方向
一件事是,我可以使用库模式(从NHibernate的犀牛博客读到它)。
基本上使用泛型,我可以创建,将工作翻过我所有的数据库表的方法。
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);
}
}
然后我继承库类,然后我可以添加特定于该实体的方法。
当试图添加一个更新的方法,有人提到,库模式是假设作用于收藏?我在这里看错了吗?为什么我无法创建更新方法?
我尝试添加一个更新的方法,但我很困惑,我将如何处理会话,并更新数据库?
我想为每个实体的所有我的数据库访问一个地方,所以UserRepository将所有基本的CRUD然后也许一些其他的方法,如GetUserByEmail()等
我认为其误导性暗示的工作和资源库模式的单元是可以互换的,因为他们解决不同的问题。我对Ayende的这篇文章很熟悉,虽然我确实认为它确实有一些事实,但请记住它只是一个意见,不应该作为事实陈述。 – 2009-08-18 22:24:10
ight,但是如果你正在学习NH,那么从Repository模式开始(在每次调用repo.Update()时都会刷新)是一个坏习惯。或者你最终可能会写出一些怪异的Repo和UoW的混合体,看起来像是Repo,但仍然需要被冲刷掉,或者错过了这个不连贯的UoW的伟大。在我看来,宅基地已经拿起了一些教程,正在迈出他的第一步,并且为了他所需要的走向稍微错误的路线,以及学习NH的最佳途径是什么。 – mcintyre321 2009-08-18 22:37:24
但是,你说得对,我听起来像是一个全面的声明。回购模式在正确的情况下非常有用。我应该说“在这种情况下,国际海事组织的回购模式正在包装的东西......” – mcintyre321 2009-08-18 22:38:56