Tag: nhibernate

NHibernate COALESCE问题

我试图用NHibernate表达以下SQL查询 DECLARE @date DATETIME = NULL; SELECT ER.Id , ER.DocumentDate FROM ExpenseReport ER WHERE ER.PeriodFrom >= COALESCE(@date, ER.PeriodFrom) OR ER.PeriodTo <= COALESCE(@date, ER.PeriodTo); 所以,在C#部分,我确实有以下类: 对于实体:ExpenseReport 对于我的搜索本身是一个单独的类 代码片段: // —– Entity class. public partial class ExpenseReport { public Nullable PeriodFrom { get; set; } // many other properties } // —– Search parameter class. public class […]

Nhibernate拦截器 – 获取属性长度OnSave

我有简单的NHibernate拦截器和覆盖方法OnSave()。 现在我要做的是获取字符串属性的SQL长度。 那可能吗。 我可以看到属性IType[]类型包含SqlType ,其中Length可用,但是找不到如何读取它。 调试示例: 这是我所拥有的代码的示例,以及我在哪里尝试获取Sql属性的长度。 public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types) { for (int i = 0; i < propertyNames.Length; i++) { //If type is string if (types[i].GetType() == typeof(NHibernate.Type.StringType)) { //Get SQL length of string property } } return false; } 任何帮助我怎么能得到这个?

Linq的NHibernate 3.1迁移问题

我正面临从NHibernate 2.1.2 + Fluent 1.0迁移到NHibernate 3.1 + Fluent 1.2的问题: 曾经工作 : List orders = session.Linq() .Where(o => o.OrderLines.Any(ol => printStatuses.Contains(ol.PrintStatus))) .ToList(); 不再工作了 List orders = session.Query() .Where(o => o.OrderLines.Any(ol => printStatuses.Contains(ol.PrintStatus))) .ToList(); 我们收到以下错误: “无法加载类型o.OrderLines 。可能的原因:未加载或未指定程序集。” OrderLines是Order类的集合属性,类型为IList NHibernate似乎无法获得该集合的完全限定类名。 但是,查看会话工厂,我们可以看到collectionRolesByEntityParticipant字典包含OrderLine类的键,其字典值指向Order.Orderlines 。 有人解决过这个吗? 编辑: PS:我们使用自动化,以防你想知道。

实体 – >界面关系,如何映射

我正在尝试开发一些基本的网络应用程序。 我将仅用两个实体Article和Image发布问题。 一篇文章有​​很多图像,一个或多个图像只属于一篇文章。 每篇文章都实现了接口IArticle和抽象类ArticleBase。 ArticleBase仅定义每篇文章的公共属性,但子文章除了ArticleBase中定义的属性外,可以具有更多属性。 所以我有( IArticle , ArticleBase , IArticle , ArticleBase ) public abstract class ArticleBase : Entity, IArticle { … public string Name { get; set; } public DateTime Created { get; set; } } public class ArticleComputer : ArticleBase { public virtual IList Images {get; set;} public virtual OSTypeEnum OS {get; […]

NHibernate中的对象身份问题是什么?

NHibernate中对象身份问题的含义是什么?

无法从NHibernate.Driver.OracleDataClientDriver创建驱动程序(将copy local设置为true)

我甚至在app.config中添加了这个小配置: ……没有成功 可能有什么不对? 另外,为了确保我的app.config是风水,这里是: true NHibernate.Dialect.Oracle10gDialect NHibernate.Driver.OracleDataClientDriver GuitarStore2 NHibernate.Connection.DriverConnectionProvider 为了记录,我在Windows 7 64位下使用最新的Nhibernate(3.3.1),在.NET 3.5上。 并且,对于完全相同的项目,我在另一台机器上遇到没有例外,但是在Windows XP中。

NHibernate 3.2中的一对一映射通过代码映射

我正在尝试NHibernate 3.2 built-in mapping by code api ( NOT Fluent NHibernate )学习NHibernate 3.2 built-in mapping by code api 。 你能帮助我映射这些实体之间的一对一(或零)关系吗? 注意:我搜索了问题,我搜索SOF,所有示例都使用Fluent API或xml; 我正在尝试在NHibernate 3.2中使用内置的映射api public class Person { public virtual int Id { get; set; } public virtual string FirstName { get; set; } public virtual string LastName { get; set; } // can be […]

混淆NHibernate中的一对一映射

有人可以向我建议在以下情况下使用的相应映射: 父表 – Timesnsactions 子表 – TranCategory1,TranCategory2和TranCategory3以及其他8个。 所有十二个表共享相同的复合键。 现在,countnsactions中的count是所有子表中事务的总和。 子表仅包含父表中的唯一值。 我正在使用的映射如下所示。 我在Parent表中使用constrained =“true”只是为了避免在Parent表的Select语句中形成连接。 但是我想我反对“约束”这个词的定义,它指出对于Timesnsactions中的每个事务,TranCategory1中必须有一个事务。 但实际上在我的设计中反过来也是如此。 那么如何修改我的映射以复制正确的行为并避免使用连接? 更新:我的当前映射在加入父和子表时给我带来了错误。请帮我修改映射,以便我可以在上面的表上执行连接。 完整的映射 Parent Table Mapping 1 Child Table Mapping (There are 10 more child tables) 连接查询导致错误 var query1 = _ses.CreateCriteria().CreateAlias(“DisclosureGroupChange”, “discGrp”, NHibernate.SqlCommand.JoinType.InnerJoin).List() exception消息是: “ORA-00923:未找到FROM关键字\ n” exception消息中显示的SQL语句 SELECT this_.TRANSACTION_ID as TRANSACT1_15_1_, this_.PARTITION_MONTH_NUM as PARTITION2_15_1_, this_.AUDIT_QUEUE_ID as AUDIT3_15_1_, this_.AUDIT_RULE_ID as AUDIT4_15_1_, […]

nhibernate joinqueryover不相关的表(相同的外键)

基本上我要做的是在外键上连接两个表。 我有这个问题: var result = _session.QueryOver(() => contentReferenceAlias) .Inner.JoinAlias(() => contentReferenceAlias.ContentReference, () => contentLibrarySearchAlias.ContentReference) .Where(() => contentReferenceAlias.ToLanguage.Id == languageId && contentReferenceAlias.ContentReference.Id == contentLibrarySearchAlias.ContentReference.Id) .SelectList(list => list .Select(() => contentReferenceAlias.ContentReference) .Select(() => contentLibrarySearchAlias.ContentReference) .Select(() => contentReferenceAlias.ContentReference.Id).WithAlias(() => resultAlias.ContentReferenceId) .Select(() => contentReferenceAlias.ContentReference.Id).WithAlias(() => resultAlias.ContentReferenceId) .Select(() => contentReferenceAlias.OrderedFrom).WithAlia SQL即时尝试重新创建: SELECT A.OrderedFrom, C.LastOrdered, A.ContentReferenceId, B.Title FROM TranslationContentReference A INNER […]

使用无状态会话延迟查找字典值

在我的应用程序中,我设置了一个三元字典映射,以便对于给定的用户,我可以为属于该用户的对象的每个实例检索“设置”。 也就是说,我有类似的东西: public class User { public virtual IDictionary BazSettings { get; set; } //… 所以每当我有一个Baz对象时,我都可以通过currentUser.BazSettings[baz]查找当前用户的baz设置。 我希望能够使用无状态会话来执行此操作,但是我使用以下代码获得了LazyInitializationException : //int bazId; using (IStatelessSession session = Global.SessionFactory.OpenStatelessSession()) { var currentUser = session.Get(Membership.GetUser().ProviderUserKey); var baz = session.Get(bazId); var bazSettings = currentUser.BazSettings[baz]; // raises `LazyInitializationException` 当我使用ISession ,问题就会消失。 完整的NHibernate错误消息包括文本“没有会话或会话已关闭”。 这是有道理的,因为在使用无状态会话时,实体未连接到会话。 但是,我认为有一种方法可以使用无状态会话来执行此查找。 如何使用无状态会话执行查找currentUser.BazSettings[baz] ?