Tag: nhibernate

NHibernate用子查询计算另一个实体?

我有两个实体: User { UserGuid, Address, . . . EmailCount // This is not a column in the database, // I just wanna get the count number from the UserEmail table // and map the value to this property } UserEmail { UserGuid, Timestamp } 问题是如何通过NHibernate中的子查询获取电子邮件数量? 到目前为止,我有这个,但它不起作用。 任何的想法? User userEntity = null; var subQuery = QueryOver.Of() […]

保存时的NHibernate FlushMode

我已经将NHibernate会话上的FlushMode属性设置为FlushMode.Never,但是当我调用session.Save(User)时,无论如何都会调用数据库。 这是怎么回事? 我认为在调用Flush()之前不应该插入。 编辑:我发现了问题,我将主键更改为guid并且有效。 是否有其他类型(即没有guid主键)可以工作? 我宁愿有一个数字而不是一个guid ……

如何在Nhibernate中加入两个表

List olist = null; olist = (_session.CreateQuery(“Select pc.Id as Id,pct.DescEn as DescEn,pct.DescAr as DescAr,pc.ContentEn as ContentEn,pc.ContentAr as ContentAr from ProjectCharter pc,ProjectCharterTemplate pct where pct.Id=pc.PRC_PCT_ID and pc.PRC_PRJ_ID=1”).List()).ToList(); 这是我的查询,我想加入两个表并得到一个输出,当我运行这是db我得到完美的回答,但当我通过c#与nhibernate映射运行它。 我得到错误。 我可以这样查询,还是有任何其他方法来连接两个表。 提前致谢。

ICriteria可以返回IDictionary而不是List 吗?

目前我可以得到这个SetResultTransformer方法返回一些任意种类的DTO的List,如下所示: var result = _session.CreateCriteria() .Add(Restrictions.In(groupCompanyInfo, (int[])groups.Select(xx => xx.Id).ToArray())) .SetProjection(Projections.ProjectionList() .Add(Projections.GroupProperty(groupCompanyInfo), “CompanyInfoGroupID”) .Add(Projections.RowCount(), “TotalNumberOfCompanies”)) .SetResultTransformer(Transformers.AliasToBean()) .List(); 其中SomeDTO定义为: public class SomeDTO { public int GroupId { get; set; } public int CountOfCompaniesInGroup { get; set; } } 我认为这有点过分需要创建一个专门用于从该查询中获取数据的类型。 理想情况下,我可以使用IDictionary ,因为内置于框架中。 尽管如此,似乎我可以返回一个List。 我以为我可以将偷偷摸摸的KeyValuePair扔进SetResultsTransformer ,如下所示: var result = _session.CreateCriteria() .Add(Restrictions.In(groupCompanyInfo, (int[])groups.Select(xx => xx.Id).ToArray())) .SetProjection(Projections.ProjectionList() .Add(Projections.GroupProperty(groupCompanyInfo)) .Add(Projections.RowCount())) // note, […]

如何使用NHibernate加载大型复杂对象图

给定一个像这样的对象图: A { IEnum } B { IEnum, IEnum, IEnum, … } C { IEnum } 如果没有N + 1问题,我怎么能急切地加载整个对象图? 这是我最终要执行的查询的伪代码: var a = Session.Get(1); // Query 1 var b_Ids = foreach(b in A.B’s) => Select(b.Id); // Query 2 var c = Session.CreateQuery(“from C where B in (b_Ids)”).Future(); // Query 3 var d = Session.CreateQuery(“from D […]

如何使用Fluent-NHibernate和MySQL指定自动递增(int)标识列

标题基本上都说明了……我正在尝试使用Fluent-NHibernate和MySQL指定一个自动递增(int)标识列。 我尝试了以下变化…… Id(x => x.ID).GeneratedBy.Native(); Id(x => x.ID).GeneratedBy.Identity(); Id(x => x.ID).GeneratedBy.Increment(); …并尝试在每个上设置默认值。 注意:我使用的是int数据类型,并且收到了诸如…之类的错误 “输入字符串的格式不正确。” 要么… “字段’ID’没有默认值’

nhibernate映射小数,精度和比例

在db里面我有decimal(9, 6)字段decimal(9, 6) Nhibernate以decimal(9, 5)格式丢失最后一位数字来保存这些数据(9,5 decimal(9, 5) 问题是如何使用nhib映射字段。 按代码映射以使用精度9,6 Property( x=>x.Longitude // precision and scale );

NHibernate的; 删除子项删除父项?

删除子项(Employee)时,为什么删除了父项(Store) ? 我用常规Cascade.All配置。 用户输入序列非常简单: 从空数据库开始 添加父级 保存,加载(加载=重新加载完整对象图) 添加一个孩子 保存,加载 删除孩子 结果:清空数据库。 (父母已删除) 这可能是一个基本的映射错误,因为这是我对NHibernate的第一次采访。 我希望Store成为聚合根 ,并认为通过不在 Store.Staff属性上设置Inverse,然后Store表将负责保存,因此聚合根。 这是一种误解吗? 实际上如果我使用Inverse,我仍然会得到相同的结果。 所以也许这不是问题,但我也想了解这一点。 并且故意不使用更广泛的会话范围,因为我想学习如何使用分离和瞬态实体。 员工删除方法: class EmployeeRepository public static void Delete(Employee employee) { using (ISession session = FNH_Manager.OpenSession()) { using (ITransaction transaction = session.BeginTransaction()) { if (employee.Id != 0) { var emp = session.Get(typeof(Employee), employee.Id); if (emp != null) […]

在使用动态更新或插入时,如何使NHibernate认为属性总是变脏?

我正在寻找有关NHibernate问题的帮助,这一直困扰着我一段时间。 长话短说: 我正在寻找一种方法,在第一级缓存中,每次执行更新或插入时“重置”实体上的属性。 我想要实现的是,当使用动态更新或插入时,NHibernate将始终认为有问题的属性是脏的。 这个背景故事是我知道,如果事务成功,我想要“重置”的列将通过触发器在数据库中设置为Null。 另一方面,第一级缓存不知道这一点,因此当我将其设置为与之前更新/插入时相同的值时,NHibernate会认为该属性未更新。 问题是我的触发器依赖于设置的值。 由此产生的混乱是,如果我想使用动态更新或插入我只能更新/插入实体一次而不“事后”刷新它(我真的不想这样做)。 提示或帮助将非常感激,因为我真的在这里碰壁

NHibernate 3 Linq查询缓存

在刚刚使用ICriteria之后,我刚开始在NHibernate 3中使用LINQ和NHibernate。 这是一个示例查询: ISession session = NHibernateSessionManager.Instance.GetSession(); var results = from project in session.Query() where project.ProjectState == ProjectState.Archive orderby project.ProjectNumber select project; return results.ToList(); 如何设置缓存? 我已经浏览了一下,其他问题似乎使用了不同的(可能是过时的?)语法,或者我做错了…