Tag: nhibernate

NHibernate多对多映射

我遇到了使用NHibernate进行多对多映射的问题。 基本上我在我的对象模型(场景和技能)中有2个类映射到我的数据库中的三个表(Scenario,Skill和ScenarioSkill)。 ScenarioSkills表只保存SKill和Scenario表(SkillID,ScenarioID)的ID。 在对象模型中,Scenario具有一些常规属性和从ScenarioSkills表中获取的关联技能列表(IList)。 Skill对象没有关联的IList of Scenarios。 从场景和技能到场景技能的映射是多对多关系: 情景* — * ScenarioSkill * — *技能 我已将列表映射为行李,因为我认为这是我阅读过的最佳选择。 映射如下: 在Scenario类中 并在技能课程内 一切正常,除非我尝试删除技能时,它不能这样做,因为ScenarioSkill表的SkillID列上存在引用约束。 谁能帮我? 我在C#asp.net 3.5 Web应用程序解决方案上使用NHibernate 2。

使用聚合的分页投影nhibernate查询的总结果

我正在动态构建一个需要实现分页的nhibernate预测查询。 就像是… var projections = Projections.ProjectionList(); foreach (var p in projection.Projections) { IProjection newProjection = null; switch (p.AggregateFunc) { case AggregateFuncTypeEnum.GroupProperty: newProjection = Projections.GroupProperty(p.Path); break; case AggregateFuncTypeEnum.Sum: newProjection = Projections.Sum(p.Path); break; default: newProjection = Projections.Property(p.Path); break; } projections.Add(newProjection, p.Name); } criteria.SetProjection(projections).SetResultTransformer(new AliasToBeanResultTransformer(projectionType)); 我可以得到前15个结果 criteria.SetFirstResult(0); criteria.SetMaxResults(15); var results = criteria.List(); 但是我还需要发送另一个查询来获取记录总数,但到目前为止我还没有想到这一点。 仍然需要应用投影,即如果结果按“代码”分组,总和为“成本”,那么100条记录可能会返回20行,而这是我感兴趣的20条。 如何获取将返回的记录总数? 谢谢

如何使用NHibernate Mapping.ByCode在非主键字段上加入表?

我有一张员工表: Employee { Name EmployeeId -pk PositionId -fk } positionId映射到位置表: Position { PositionId -pk ReportsToId PositionName PositionDescription } ReportsToId字段是该职位经理的职位ID。 我想选择一名员工,他们的职位和经理的详细信息。 如何使用NHibernate的Mapping.ByCode完成这项工作。 ReportsToId字段不是关键字段。 从我在网上看到的,这似乎影响了映射……

同一个NHibernate Linq查询中的Cacheable(),FetchMany()和ToFuture()

遇到类似于以下示例的情况: 1个父实体具有2个子集合的Employee : Addresses和Phones 我需要在single roundtrip检索所有员工的初始化地址和电话,并使用Cacheable()缓存在二级缓存中实现cache the query 。 使用: var baseQuery = session .Query() .Cacheable(); baseQuery .FetchMany(e => e.Addresses) .ToFuture(); var list = baseQuery .FetchMany(e => e.Phones) .ToFuture() .ToList(); 应该工作,但我得到以下例外: NHibernate.PropertyAccessException 信息: Exception occurred getter of NHibernateTest.Objects.Entity`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Id 堆栈跟踪: at NHibernate.Properties.BasicPropertyAccessor.BasicGetter.Get(Object target) in p:\nhibernate-core\src\NHibernate\Properties\BasicPropertyAccessor.cs:line 213 at NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetIdentifier(Object entity) in p:\nhibernate-core\src\NHibernate\Tuple\Entity\AbstractEntityTuplizer.cs:line 139 […]

如何在代码中使用log4net配置NHibernate日志记录,而不是在xml文件中?

依靠这个文档http://nhibernate.info/doc/howto/various/configure-log4net-for-use-with-nhibernate.html ,使用XML配置文件通过log4net配置NHibernate日志非常容易。 但我需要在C#代码中做同样的事情。

NHibernate中有不同类型答案的问题

我正试图找到问卷调查问题的整洁解决方案。 让我们说我有一个Questionnaire ,其中包含一些Answer ,例如 public class Questionnaire { public virtual ISet Answers {get;set;} } 答案需要根据问题的不同类型,例如出生日期,十分之一,你为什么这么认为等等。 我的第一个想法是这样的: public class Question { public virtual QuestionType TypeOfQuestion {get;set;} public virtual string PromptText {get;set;} } public class Answer { public virtual Question Question {get;set;} } public class DateTimeAnswer : Answer { public virtual DateTime Response {get;set;} } public class […]

如何使用nhibernate使用递归自连接SQL获得最佳性能

我有一个带有parentId的Team表/实体,它是一个自己加入同一个表的id。 有一个名为TopUnit的属性将递归调用.Parent直到它在Team实体上找到一个名为“IsTopUnit”的属性 使用nhibernate探查器,这现在导致选择N + 1警报。 无论如何,优化什么本质上是一个递归自连接查询,以避免选择N + 1行为。 batchsize似乎适用于子集合,但它似乎没有帮助在这种情况下因为它所有“同步”因为我不能做一个递归SQL语句。 我想这个问题在nhibernate之外也是有效的。 在SQL中执行递归语句的最佳方法是什么。 看起来你不得不把它分解成多个查询。

使用连接查询动态提取

我正在尝试使用nhibernate的新查询并找到一个新问题:( 以此为模型: public class D { int id; } public class C { int id; } public class B { int id; ICollection Cs; ICollection Ds; } public class A { int id; ICollection Bs; } 我想要一个具有特定B对象的对象,并且非常渴望获取所选B的Cs或Ds集合: public virtual A Read(int idB, params Expression<Func>[] eagerFields) 我开始 IEnumerable query = _session.QueryOver() .JoinQueryOver(a => a.Bs) .Where(b => […]

QueryOver的子查询

我在使用带查询的子查询时遇到问题。 这就是我所拥有的 var address = QueryOver.Of() .Where(x => x.City.IsLike(“%” + city + “%”)).Select(x => x.Person.Id); var result = Session.QueryOver() .Where(x => x.Type.IsLike(type + “%”)) .And(x => x.Name.IsLike(“%” + name + “%”)) .WithSubquery.WhereExists(address); 我有一个人的桌子,一个人有多个地方。 所以人的身份,姓名,类型 和地址将有PersonId和城市等。 因此,想要按名称和类型以及“地址”表中的“城市”搜索某个人

在nhibernate中的Linq-ing计算属性无法解析属性Error

我一直试图通过遵循Hendry Luk的计算属性解决方案在我的持久层中创建一个计算属性 。 我可以使用linq查询从数据库中选择值: var result = from parcel in Repository.Query(); 当我尝试在所选结果上执行某个位置时,我得到一个无法解决属性错误。 这是我的代码的样子。 我的型号: namespace ConsoleApplication14 { using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; public class Common1 : ICommon { public virtual int Id { get; set; } public virtual string Name { get; set; } //public static readonly Expression<Func> CalculatedDisplayExpression = […]