Tag: nhibernate

NHibernate QueryOver带有子查询和别名

我正在努力将以下(简化)HQL转换为QueryOver: select subscription from Subscription as subscription where not exists ( from Shipment as shipment where shipment.Subscription = subscription and (shipment.DeliveryDate = :deliveryDate) ) 我走到这一步: Subscription subscription = null; Session.QueryOver(() => subscription) .Where(Subqueries.NotExists(QueryOver.Of() .Where(shipment => shipment.Subscription == subscription) .And(shipment=> shipment.DeliveryDate == deliveryDate) .Select(shipment => shipment.Id).DetachedCriteria)); .TransformUsing(new DistinctRootEntityResultTransformer()); 问题是上面的Subqueries和Where语句给了我以下(无效)where子句: where shipment.SubscriptionId is null 当我想要的是: where shipment.SubscriptionId […]

使用MyGeneration和Fluent NHibernate

我在这里使用MyGeneration为NHibernate代码生成找到了一个很棒的模板, http://vucetica.blogspot.com/2009/01/nhibernate-template-for-mygeneration.html 这将创建扩展名为hbm.xml的XML映射文件。 我很想知道是否有人知道支持流畅NHibernate的模板,它定义了使用C#文件的映射。 谢谢

如何使用Nhibernate的代码映射生成access =“field.camelcase-underscore”?

我似乎找不到设置命名策略的方法。

NHibernate预测和“有”条款

我正在使用NHibernate使用条件API查询我的数据库。 我的标准如下: ICriteria c = Session.CreateCriteria(typeof(Transaction)); ProjectionList projections = Projections.ProjectionList(); projections.Add(Projections.Sum(“Units”), “Units”); projections.Add(Projections.GroupProperty(“Account”), “Account”); projections.Add(Projections.GroupProperty(“Security”), “Security”); c.SetProjection(projections); 这工作正常,但我想要的是一种方法,能够限制查询只在“Units”属性> 0时返回。在SQL中我只是我们一个Having Units > 0子句但是我没有能够在NHibernate中找到一种方法。 有没有人有任何想法或是我唯一的选择使用HQL?

在Fluent NHibernate中引用具有公式的实体

我有一个具有N:1父子关系的模式,该模式存储在另一个表中并由公式选择。 是否可以使用公式将此实体映射到父级? public class ParentEntity { public virtual int ParentId { get; set; } public virtual ChildEntity Child{ get; set; } } public class ParentMapping : ClassMap { public ParentMapping() { Table(“ParentTable”); Id(x => x.ParentId).Column(“ParentId”).GeneratedBy.Assigned().Not.Nullable(); References(x => x.Child).Formula( @”( SELECT TOP 1 ChildTable.ChildId FROM ChildTable WHERE ChildTable.ParentId = ParentId )” ); } } 此映射生成的SQL如下所示: SELECT […]

如果2个或更多人在同一时间更新记录会发生什么?

我正在使用NHibernate和version属性,每次更新聚合根时都会自动递增。 如果2个或更多人在同一时间更新同一记录会怎样? 另外,我该怎么测试呢? 请注意,这不是我一直在进行的情况,只是想知道。

EF与Nhibernate合并断开的对象图

我刚刚在几个星期前开始了一个新项目,并决定尝试使用EF Code First,之前我使用过NHIbernate,我喜欢从MS中获得ORM的想法,到目前为止它一直很棒 – 直到我开始制作复杂的物体。 我的项目层如下:Azure WCF角色 – 使用EF Code First处理DAL。 带有Knockout的MVC 4的Azure WebSite角色 – 处理客户端。 (我为未来创建了WCFRole,我们需要从不同平台访问服务) 这是非常基本的EF Code First设计,我遇到了以下问题: – 我只在服务和站点之间传输DTO,并制作了一个通用映射器来映射内部DTO(如果存在)。 – 我有一个City表和一个带有City Property的地址对象(我们需要City作为特殊function的属性,而不仅仅是名称) 客户端知道城市列表,并且正在返回现有城市的新地址当我尝试添加新地址时,会创建一个新城市,其中包含现有旧城市的数据,我已经知道这是因为EF没有我不知道如何合并断开连接的对象和我阅读的内容不支持任何合并,并且简单的不太舒服的解决方案只是管理对象状态 – 将City对象状态更改为Unchanged。 但是使用大型复杂数据库设计处理这个问题听起来很可怕 我的问题 – 处理这个问题的最佳做法/简单方法是什么? 我想过一些解决方案 – 覆盖SaveChanges方法遍历所有对象,如果ID不是null / 0 /其他一些约定将其从Added更改为Unchanged – 这个解决方案可以完成吗? 我的第二个问题 – 因为我对NHibernate(连接对象)有很多经验 – 我想知道NHibernate对此有何看法? 我在某处读到NHibernate确实具有重新连接断开的复杂对象的AutoMagic Mergefunction,这是真的吗? 我的基本断开连接的地址 – >城市设计是否会与AutoMagic Merge一起开箱即用? 使用它的后果是什么? 非常感谢 :) 更新:该问题的简化代码。 […]

NHibernate QueryOver别名问题

我在Visual Web Developer 2010 Express的.Net 4目标项目中使用NuGet的最新版NHibernate(3.3.1.4000)。 当我尝试按照我看到的用于定义别名的示例时,在使用lambdas设置它们时会出现exception(参见屏幕截图)。 正如您所看到的,我收到错误Cannot convert lambda expression to type ‘string’ because it is not a delegate type 。 我在代码顶部引用了LINQ命名空间: using System.Linq; using System.Linq.Expressions; 有什么可能导致问题的想法?

“会议已结束!” – NHibernate

这是在Web应用程序环境中: 初始请求能够成功完成,但是任何其他请求都会从NHibernate框架返回“Session is Closed”响应。 我正在使用HttpModule方法,代码如下: public class MyHttpModule : IHttpModule { public void Init(HttpApplication context) { context.EndRequest += ApplicationEndRequest; context.BeginRequest += ApplicationBeginRequest; } public void ApplicationBeginRequest(object sender, EventArgs e) { CurrentSessionContext.Bind(SessionFactory.Instance.OpenSession()); } public void ApplicationEndRequest(object sender, EventArgs e) { ISession currentSession = CurrentSessionContext.Unbind( SessionFactory.Instance); currentSession.Dispose(); } public void Dispose() { } } SessionFactory.Instance是我的单例实现,使用FluentNHibernate返回一个ISessionFactory对象。 在我的存储库类中,我尝试使用以下语法: public […]

用NHibernate对连续全名进行模糊搜索

我试图将以下SQL转换为NHibernate: SELECT * FROM dbo.Customer WHERE FirstName + ‘ ‘ + LastName LIKE ‘%’ + ‘bob smith’ + ‘%’ 我试图做这样的事情,但它不起作用: name = “%” + name + “%”; var customers = _session.QueryOver() .Where(NHibernate.Criterion.Restrictions.On(c => c.FirstName + ‘ ‘ + c.LastName).IsLike(name)) .List(); 我基本上要做的是能够在文本框中搜索客户名称,其示例值为“bob smith”,并使用上面SQL中的LIKE表达式搜索数据库。 如果我要错误地搜索FirstName和LastName列,请帮我一个替代方案,但上面的SQL查询可以得到我需要的东西。 更新2个解决方案: 所以我现在找到了解决这个问题的两个方案。 一种是使用Criteria API。 以下post的答案非常有用: https : //stackoverflow.com/a/2937100/670028 我找到了另一个解决方案,感谢我的一位有用的同事建议使用LINQ投影和匿名类型。 这是使用LINQ的解决方案: var customers […]