我在使用NHibernate的项目中使用Repository / Unit of Work模式。我有许多存储库,例如客户和帐户。通过将相同的ISession对象传递给每个存储库的构造函数,每个存储库与相同的ISession(工作单元模式)相关联。
然后,我创建了一堆客户及其关联帐户,并将它们添加到各自的存储库中。现在我想将这些存储库保存到数据库中。但是,要保存在NHibernate中,需要调用ISession.Save()并传入一个实体。如果我使用实体框架,而我的ISession是一个ObjectContext,我将能够调用ObjectContext.SaveChanges(),并且我所有存储库的内容都将保存到数据库中。我怎样才能在NHibernate中这样做?我必须单独保存每个对象,而不是作为一个整体的ISession,这似乎很奇怪。我还必须按特定顺序保存它们,因为客户必须有一个帐户(客户表中的AccountID FK不能为空)因此我必须首先保存帐户,然后是客户。
我错过了什么?
答案 0 :(得分:2)
您无需明确保存对象。 Hibernate在构建时考虑了所谓的“持久性无知”。只需刷新会话,所有已知实体的所有更改都将保留。
所以只需致电Session.Flush();
答案 1 :(得分:1)
您错过了将新对象与ISession关联的部分(session.Save())。否则,NH如何知道您创建的某个对象需要保留?如果您只修改现有对象(您从ISession获取的对象),那么您需要做的就是提交事务/刷新会话。
对于客户 - >帐户关系,您可以让客户级联保存在其帐户上。