Tag: nhibernate

NHibernate Linq和DistinctRootEntity

当我执行以下查询时,我得到一个exception,告诉我’feedItemQuery’包含多个项目(因此SingleOrDefault不起作用)。 当使用Criteria api而不使用DistinctRootEntity转换器时,这是预期的行为,但是当使用linq时,我希望得到一个单一的根实体(FeedItem,其属性Ads(of ICollection)包含所有广告)。 有没有办法告诉NHibernate.Linq使用DistinctRootEntity转换器? 我的查询: var feedItemQuery = from ad in session.Linq().Expand(“Ads”) where ad.Id == Id select ad; var feedItem = feedItemQuery.SingleOrDefault(); // This fails !? 映射: … 提前致谢

如何使用Linq与Castle ActiveRecord

我正在玩Castle ActiveRecord并注意到下载包含文件Castle.ActiveRecord.Linq.dll 。 我没有找到任何使用Linq和ActiveRecord的文档,只有一些 旧 博客文章 。 使用模式是什么? Castle.ActiveRecord.Linq是否Castle.ActiveRecord.Linq准备好投入生产?

N-Hibernate与Oracle中的长字符串会导致错误

我使用oracle作为db和流利的Nhibernate进行映射。 下面是我的对象类 public class UserFieldEvent { public virtual int Id { get; set; } public virtual UserFieldBase UserField { get; set; } public virtual EventType EventType { get; set; } public virtual string EventScript { get; set; } } EventScript的长度可以是0到4000.在数据库中,我将EventScript的列类型设置为CLOB。 下面是我的映射类: public UserFieldEventMap() { Table(“TBLDS_USERFIELDEVENT”); Id(x => x.Id).GeneratedBy.Sequence(“SEQDS_USERFIELDEVENT”); Map(x => x.EventType).CustomType(); Map(x => x.EventScript).CustomSqlType(“CLOB”); References(x […]

我应该总是在nhibernate中使用事务(即使是简单的读写操作)吗?

我知道对于多部分写入,我应该在nhibernate中使用事务。 然而,对于简单的读写操作(1部分)…我已经读过,总是使用事务是一种好习惯。 这需要吗? 我应该做一下简单的阅读吗? 或者我可以将交易部分全部丢弃? public PrinterJob RetrievePrinterJobById(Guid id) { using (ISession session = sessionFactory.OpenSession()) { using (ITransaction transaction = session.BeginTransaction()) { var printerJob2 = (PrinterJob) session.Get(typeof (PrinterJob), id); transaction.Commit(); return printerJob2; } } } 要么 public PrinterJob RetrievePrinterJobById(Guid id) { using (ISession session = sessionFactory.OpenSession()) { return (PrinterJob) session.Get(typeof (PrinterJob), id); } } 简单的写作怎么样? […]

是否有一个示例为什么应该在NHibernate中覆盖Equals / GetHashCode?

我发现很多post都解释说应该总是在NHibernate实体类上重写Equals / GetHashCode。 如果我不使用套装,这真的有必要吗? 我根本找不到一个示例,其中显示缺少Equals / GetHashCode会导致意外和错误的行为。 没有它们,一切似乎都很完美。 这是非常奇怪的,每个人都说这是必要的,但没有人可以提供一个样本,说明为什么需要这样做。

通过集合获取Paginated实体

考虑两个实体具有one-to-many收集Vehicles public class Person { public IList Vehicles { get; set;} } public class Vehicle { public string Name { get; set;} public Person Owner { get; set; } } 我显示一个有车辆的人员网格,并显示网格中第一辆车的名称。 网格是分页的。 我使用以下标准来获取数据 我有一个加载网格视图数据的标准 var criteria = DetachedCriteria.For() .CreateAlias(“Vehicles”,”vehicle”, JoinType.InnerJoin) .SetResultTransformer(new DistinctRootEntityResultTransformer()) .SetMaxResults(pageSize) .SetFirstResult((page – 1) * pageSize) criteria.Add(Restrictions.Eq(“vehicle.Name”, “super”)); 其中page和pageSize是计算位。 问题是因为最大结果和第一个结果是在数据库中计算的,并且不同的根在外部完成,行数不匹配。 有没有办法解决这个问题?

使用nhibernate和ICriteria连接两个不相关的视图表

我有两个基于两个视图的实体。 映射看起来像这样: 完全A: 实体B: 实体A基于表视图,该视图是用于搜索优化的更复杂的表结构的展平视图。 现在,我希望能够通过使用NHibernate和Criteria-API从实体A中获取Id在实体B中 “InvoiceId”列中的所有行,以获取实体B中“ResourceId”的特定值。 这两个表都是视图,它们没有声明的关系。 我在C#中尝试了以下代码,但它不起作用: var criteria = _session.CreateCriteria(typeof(SearchView)); criteria.CreateAlias(“SearchInvoiceResourceLookUpView”, “srf”,JoinType.InnerJoin) .Add(Restrictions.EqProperty(“sfr.InvoiceId”, “Id”)) .Add(Restrictions.Eq(“sfr.ResourceId”, invoiceResId)); 用于此目的的原始SQL将是: SELECT * FROM SearchView JOIN SearchInvoiceResourceLookUpView srf on srf.InvoiceId = Id WHERE srf.ResourceId = ‘[Inser resource id here]’ 我该如何解决这个问题? 还有另一种更好的方法吗?

使用QueryOver时,Nhibernate无法解析属性exception,适用于QueryAll

我有以下问题 基本上我有以下两个片段: var contactAssociation = session.QueryOver(() => contactAssociationAlias) .Where(() => contactAssociationAlias.Contact.ID == careGiverId && contactAssociationAlias.Client.ID == clientKey) .Where(() => contactAssociationAlias.AclRole.RoleName == “Care Giver”) .SingleOrDefault(); 和 var contactAssociation = session.Query() .Where(cr => cr.Contact.ID == careGiverId && cr.Client.ID == clientKey) .Where(cr => cr.AclRole.RoleName == “Care Giver”) .SingleOrDefault(); 第二个工作第一个输出此错误: Message=could not resolve property: AclRole.RoleCode of: SL.STAdmin.DAL.ContactAssociation 有人知道为什么吗? 先感谢您

查询,Get 和Load 之间的NHibernate区别

我想找到在执行以下操作时使用这三种从数据库获取数据的方法的不同之处: public T GetById(int id) { using (var db = Database.Session) { using (var t = db.BeginTransaction()) { try { return db.Get(id); } catch (Exception) { if (!t.WasCommitted) { t.Rollback(); } throw; } } } } 要么 public T GetById(int id) { using (var db = Database.Session) { using (var t = db.BeginTransaction()) { try […]

用于Oracle INTERVAL DAY TO SECOND数据类型的NHibernate映射

我挑战我的一位同事的问题并非如此,而是由DBA提出的。 我们在其中一个对象上有一个TimeSpan属性,该属性需要保留。 是的,您可以只从对象的Start和End DateTime属性推断出值,但DBA坚持要将此值保存在数据库表中。 因此,DBA选择保存该值的Oracle数据类型是INTERVAL DAY(2)TO SECOND(6)。 Oracle.DataAccess中的相应类型是OracleDbType.InvervalDS,但是我无法找到与如何使用NHibernate进行映射相关的任何内容。 我们最终得到了这个解决方案 public class SomeTimeSpanTestClass { public virtual string TimeSpanTest { get; protected set; } public virtual TimeSpan ActualTimeSpan { get { // Need to do some formatting of TimeSpanTest before it can be parsed return TimeSpan.Parse(TimeSpanTest); } set { TimeSpanTest = string.Format(“{0}{1} {2}:{3}:{4}.{5}”, value.ToString().Contains(‘-‘) ? “-” : […]