我知道对于多部分写入,我应该在nhibernate中使用事务。但是对于简单的读写(1部分)呢……我读到始终使用事务是一种很好的做法。这是必需的吗?我应该做以下简单阅读吗?或者我可以将交易部分全部放在一起吗?publicPrinterJobRetrievePrinterJobById(Guidid){using(ISessionsession=sessionFactory.OpenSession()){using(ITransactiontransaction=session.BeginTransaction()){varprinterJob2=(PrinterJob)session.G
我编写了一个NHibernateSessionFactory类,它包含一个静态NhibernateISessionFactory。这用于确保我们只有一个session工厂,并且第一次调用OpenSession()时我创建了实际的SessionFactory-下次我使用它并在其上打开一个session。代码如下所示:publicclassNhibernateSessionFactory:INhibernateSessionFactory{privatestaticISessionFactory_sessionFactory;publicISessionOpenSession(){if(_
在大多数NHiberate示例中,他们使用ISET而不是IList。我知道两者之间的基本区别即一个集合是唯一的。但是,我不确定为什么他们在延迟加载时使用ISet而不是IList。(Iesi.Collections.Generic)ISet相对于IList有什么优势?延迟加载时的特殊性。 最佳答案 我相信这主要是由于NHibernate的java继承。参见theFAQentryonpersistentcollections.特别提到Java默认情况下如何包含比C#更多的集合,并且它们特别映射到ISet。我相信大多数示例使用它的原因主要
我的存储库在UnitOfWork模型中工作;所有操作,无论是检索还是持久化,都必须在IDisposableUnitOfWorktoken对象的范围内执行,该对象在幕后与Session执行请求的工作。所以,基本模式是:using(varuow=repo.BeginUnitOfWork()){try{//DBoperationshere;allrepomethodsrequirepassinginuow....repo.CommitUnitOfWork(uow);}catch(Exception){repo.RollbackUnitOfWork(uow);throw;}}我还实现了一些包装
考虑到FluentNHibernate已经有一段时间了,我想应该会有一本书可以买到,所以我在亚马逊和谷歌中搜索,但没有关于fluentnhiberanet的书籍。我是对的还是这本书已经存在了? 最佳答案 FluentNHibernate是NHibernate的映射策略,它不足以证明一本书本身。映射之外的所有内容都与NHibernate完全相同(事实上,它是NHibernate)。你能做的最好的事情是研究现有的NHibernateMaterial(例如Cookbook建议的NicholasMurray),然后使用FluentNHibe
我已经阅读了很多关于相同错误的问题,但没有一个与我的确切问题相匹配。我正在尝试使用FluentNHibernate访问一个对象的属性,该对象本身是根对象的一部分。一些答案说我需要使用投影,其他人说我需要使用连接,我认为它应该通过延迟加载来工作。这是我的两个类以及Fluent映射:美术课publicclassArtist{publicvirtualintId{get;set;}publicvirtualstringName{get;set;}publicvirtualIListAlbums{get;set;}publicvirtualstringMusicBrainzId{get;set
如何从查询返回单个列而不是整个对象?我可以做这样的事情来获取整个对象,但我想要的只是名称:IListtribbles=session.CreateCriteria(typeof(Tribble)).List();IListnames=newList();foreach(Tribbletintribbles){names.Add(t.Name);}我希望能够指定额外的条件,那么是否可以只排除某些列不被检索? 最佳答案 这是我最终使用的解决方案:ICriteriac=session.CreateCriteria(typeof(Tribb
我正在尝试使用FluentNHibernate迁移需要“处理”部分数据库的数据库。源数据库是一个MSAccess数据库,我当前使用的表是一个带有OLE对象字段的表。目标数据库是MSSQLServerExpress数据库。在实体中,我只是将这个字段定义为byte[]但是在加载时,即使只是为单个记录加载单个字段,我也会遇到System.OutOfMemoryExceptionbyte[]test=aSession.Query().Where(x=>x.Id==5590).Select(x=>x.FileData).SingleOrDefault();然后我尝试实现blobtypeliste
我有一个在nHibernatev4.0.4.4000上运行的应用程序-它在三个独立的网络服务器上运行在生产环境中。对于ID生成,我使用默认的HiLo实现(跨表的唯一ID)。有时,在使用以下堆栈跟踪保存新实体时,它会生成重复的ID:atNHibernate.AdoNet.SqlClientBatchingBatcher.DoExecuteBatch(IDbCommandps)atNHibernate.AdoNet.AbstractBatcher.ExecuteBatchWithTiming(IDbCommandps)atNHibernate.AdoNet.AbstractBatcher.
我有我的nHibernate设置并且可以正确地使用QueryOver来处理大多数查询,但是,每当我尝试执行HQLCreateQuery时,我都会收到实体未映射的异常。我可以使用QueryOver确认同一个实体工作正常。注意:我使用的是fluentnHibernate有什么想法会导致这种情况吗? 最佳答案 如果您在映射中禁用了自动导入(),那么您将不得不在查询中的任何地方使用完全限定的类名,不合格的类名将不起作用。否则,启用自动导入。Conventions.Setup(x=>{x.Add(FluentNHibernate.Conven