Tag: nhibernate

Bidi关联和NHibernate映射

我有BidiParent和BidiChildList类,它们以双向父子关系链接父母和孩子。 如果通过例如服务层更新孩子的父母,则新旧父母的孩子列表会自动更新以反映更改。 同样,如果通过例如添加新孩子来更新父母的子女列表,则子女的父母将自动更改为旧父母的子女列表。 我想尝试建立一个“智能”域模型。 显然,第一个问题是:这是一个好主意吗? 第二个问题是:是否有可能告诉NHibernate访问和修改字段 _Children或_Parent,但是要考虑属性 Children或Parent是否与字段完全同义? NHibernate应该加载并保存内部字段,但HQL或LINQ查询应该使用公共属性? public class BidiParent { … } public class BidiChildList : IList { … } public class Parent { public string Name { get; set; } public IList Children { get { return ChildrenBidi; } set { ChildrenBidi.Set(value); } } private BidiChildList ChildrenBidi { get { return […]

Fluent nHibernate – 如何在联结表上映射非键列?

以Fluent nHibernate网站上提供的示例为例,我需要稍微扩展一下: alt text http://wiki.fluentnhibernate.org/images/2/24/FirstProjectSchema.png 我需要在StoreProduct表中添加一个’Quantity’列。 我如何使用nHibernate映射这个? 为上面给出的场景提供了一个示例映射,但我不确定如何将Quantity列映射到Product类上的属性: public class StoreMap : ClassMap { public StoreMap() { Id(x => x.Id); Map(x => x.Name); HasMany(x => x.Employee) .Inverse() .Cascade.All(); HasManyToMany(x => x.Products) .Cascade.All() .Table(“StoreProduct”); } }

Linq for NHibernate – 对外键进行过滤会导致额外的查找

尝试使用Linq for NHibernate并首先注意到这一点: var list1 = (from ut in session.Linq() where ut.User.ID == 10 select ut).ToList(); var list2 = session.CreateCriteria(typeof (UserThings), “ut”) .Add(Expression.Eq(“ut.User.ID”, 10)) .List(); 第一个查询将加入“用户”表,但第二个查询不会。 不知何故,第二个知道UserID是外键,并且它不需要执行连接来过滤。

在nhibernate中缺少对环境事务的支持?

我知道NHibernate支持环境事务,因为NHibernate会话在事务范围内的环境事务中登记。 但是,有一些奇怪之处,请考虑以下测试: [Test] public void Transaction_RollsBackTransactionInsideOfAmbientTransaction_AmbientTransactionAborted() { // arrange ISessionFactory sessionFactory = SessionFactoryOneTimeInitializer.GetTestSessionFactory(); ISession session = sessionFactory.OpenSession(); SessionFactoryOneTimeInitializer.CreateDataBaseSchemaIfRequiredByConfiguration(session); using (new TransactionScope()) { using (ITransaction transaction = session.BeginTransaction()) { // act transaction.Rollback(); } // assert Assert.AreEqual(TransactionStatus.Aborted, Transaction.Current.TransactionInformation.Status); } } 此测试失败。 NHibernate将如何确保环境事务不会持久存储到数据库?

NHibernate – 使用ICriteria进行分页和可选的ICriteria调用

我想做这样的事…… return GetSession() .ToPagedList(page, pageSize, x=> x.SetFetchMode(DomainModelHelper.GetAssociationEntityNameAsPlural(), FetchMode.Eager)); 但我不知道如何将这个Func传递到ISession或ICriteria 。 我有一个标准的分页扩展方法,这个扩展方法应该有一个重载,我可以传递额外的ICriteria方法,这样我还可以设置FetchMode或其他东西。 扩展方法: public static class CriteriaExtensions { public static PagedList ToPagedList(this ISession session, int page, int pageSize) where T : Entity { var totalCount = TotalCount(session); return new PagedList(session.CreateCriteria() .SetFirstResult(pageSize * (page – 1)) .SetMaxResults(pageSize * page) .Future().ToList(), page, pageSize, totalCount); } public static PagedList […]

尝试NHibernate事务时捕获SqlException

我需要看到一个由SqlException产生的错误代码 – 但是,我无法触发它。 我使用NHibernate并在我的表上设置了SQL UNIQUE CONSTRAINT 。 当违反该约束时,我需要捕获错误代码并根据该消息生成用户友好的消息。 这是我的try / catch示例: using (var txn = NHibernateSession.Current.BeginTransaction()) { try { Session[“Report”] = report; _reportRepository.SaveOrUpdate(report); txn.Commit(); Fetch(null, report.ReportId, string.Empty); } catch (SqlException sqlE) { var test = sqlE.ErrorCode; ModelState.AddModelError(“name”, Constants.ErrorMessages.InvalidReportName); return Fetch(report, report.ReportId, true.ToString()); } catch (InvalidStateException ex) { txn.Rollback(); ModelState.AddModelErrorsFrom(ex, “report.”); } catch (Exception e) { […]

NHibernate hql元组结果

hql = “select f, b from Foo f, Bar b” var resultList = session.CreateQuery(hql).List(); result list item是一个数组,其中[0]的类型为Foo,[1] id为Type Bar 有没有办法使用Tuple (或其他generics类)作为object []的通用参数,以便可以跳过转换?

Nhibernate – 在SelectList上列出

我正在使用NHibernate,我遇到了一个问题。 我的项目中有这些实体:客户端: public class Client { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string UserName { get; set; } public virtual string Password { get; set; } public virtual IList Dates { get; set; } public Client() { Dates = new List(); } } […]

流畅的NHibernate多列有多列不插入

我正在努力与流利的nhibernate从Fluent Nhibernate多对多映射与额外的列 我复制了映射并编写了我能做的最小程序……但是它不会保存……有人能提供一些见解吗? public class Product { public int Id { get; set; } public string Name { get; set; } public IList Inventory { get; set; } public Product() { Inventory = new List(); } } public class Warehouse { public int Id { get; set; } public string Name { get; set; } […]

Nhibernate Group By和Alias To Bean

我一直在努力将旧的查询翻译成Nhibernate。 我们正在将旧项目从Nhibernate 2升级到最新版本。 我使用QueryOver语法,因为Linq不是一个选项,因为查询的复杂性(同事的建议)。 我想查询DB(Oracle)以获得一些必须分组的结果。 结果我需要一个我的DTO的分组集合。 我也注意到nhibernate在转换为具有复杂属性的DTO时遇到了麻烦(嵌套DTO)为了解决这个问题,我找到了这个主题。 这很好用,但我不是魔术弦的粉丝…… 我将添加一些代码片段,了解我的怪物查询在这一刻的表现。 问题是我似乎无法弄清楚如何在不破坏其他所有内容的情况下添加组。 所以我想在一个属性上分组但在我的结果中仍然有DTO。 就像是: ILookup<int,IEnumerable> 欢迎任何帮助。 抱歉变量和类是荷兰语-_- SYNUITGAANDEBRIEF uitgaandebrief = null; SYNAANVRAAG joinedAanvraag = null; SYNDOSSIER joinedDossier = null; SYNVERBRUIKSADRES joinedVerbruiksAdres = null; SYNEAN joinedEan = null; SYNCTENERGIETYPE joinedEnergieType = null; SYNBRIEFBESTEMMELINGEN joinedBriefBestemmeling = null; SYNCTBRIEFTYPE joinedBriefType = null; SYNCTBRIEFSTATUS joinedBriefStatus = null; SYNCONTACTPERSOON joinedContactpersoon = null; […]