Tag: nhibernate

NHibernate:无状态会话错误消息无法获取代理

我正在使用nHibernate无状态会话来获取对象,更新一个属性并将对象保存回数据库。 我一直收到错误信息: 无状态会话无法获取代理 我有类似的代码在别处工作,所以我无法弄清楚为什么这不起作用。 有谁知道问题可能是什么? 我正在尝试更新ScreenLockVersion属性。 制图: 码: public class Screen : BaseDomain { private string screenName; private string subScreenName; private Screen parent; private IList childScreens = new List(); private IList affectedScreens = new List(); private Guid screenLockID; private int screenLockVersion; private bool screenLockRequired; private LastModified lastModified; private Identity identity; private ApplicationName application; protected Screen() […]

如何使用Session.Query设置Nhibernate LINQ命令超时

是否有人知道在使用Session.Query时设置UnderlyingCriteria方法? 我正在尝试为一个特定查询设置更严格的命令超时(或查询超时),我试图避免在会话中的连接或其他查询上添加该约束。 我在旧的QueryOverfunction中找到了你可以使用的东西 // QueryOver returns a IQueryOver an nHibernate class // with access to UnderlyingCriteria var query = Session.QueryOver(); query.UnderlyingCriteria.SetTimeout(120); 问题在于它是旧的,有缺陷的,只是有一大堆function问题。 使用Query返回IQueryable var query = (from c in Session.Query()); IQueryable是一个MS类,没有明显访问命令超时等。 另一种选择是以某种方式为所有命令设置会话命令超时,然后恢复到默认值,但我没有看到任何公共机制来执行此操作,除了先设置命令超时并将其保留,比较如何为NHibernate LINQ语句设置超时

nhibernate无法使用LeftOuterJoin解析属性(仅在Visual Studio 2015中)

我需要一些帮助,因为无法解释这一点。 我们有一个半复杂的nhibernate查询: var query = _tyreRepository.Session.QueryOver(() => tyreAlias) .JoinQueryOver(() => tyreAlias.Pattern, () => patternAlias) .JoinQueryOver(() => patternAlias.Brand, () => brandAlias) .JoinQueryOver(() => tyreAlias.RimSize, () => rimSizeAlias) .JoinQueryOver(() => tyreAlias.SpeedIndex, () => speedIndexAlias, JoinType.LeftOuterJoin); 哪个在Visual Studio 2012中工作正常,我们最近升级到Visual 2015,现在这个查询不起作用; 当你在速度指数上使用where时: query.Where(() => speedIndexAlias.SpeedKm >= speedKms); 否则查询工作正常。 花了很长时间调试回滚代码没什么用。 然后我们得到了相同的项目,在visual studio 2012中正常工作。 我们无法弄清楚为什么当我们在visual studio 2015中编译项目时,这个查询不再有效(对查询没有任何改变)。 我非常喜欢2015年的所有新语言变化,但是当我们在Visual Studio 2015中编译代码时,我们的网站中断…

在nhibernate中执行自定义查询并映射到自定义域对象

嗨我有这样的查询 SELECT Customer.Name, sum([Load].Profit) as Profit FROM Customer INNER JOIN [Load] ON Customer.Id = [Load].CustomerId GROUP BY Customer.Name 我需要在nhibernate中执行此查询并将其映射到我创建的自定义域对象,就像这样 public class CustomerProfit { public String Name; public Decimal Profit; } 有可能这样做吗? 以及如何在HQL中执行此自定义查询?

NHibernate.AssertionFailure:null标识符

在我将计算机推入下周之前…… 我已经检查了所有关于此问题的其他问题,但他们都没有解决方案。 我已经剥离了这个代码,但它仍然没有工作。 保存对象时出现此错误:NHibernate.AssertionFailure:null标识符 这是我的映射文件: public class OrderMap : BaseMap { public SalesOrderMap() { Id(x => x.Id).Column(“OrderId”); } } 这是实体: public class Order { public virtual int Id { get; protected set; } } 这是我的测试代码: Order order = new Order(); ISession session = SessionFactory.GetCurrentSession(); session.SaveOrUpdate(order); <—-EXCEPTION ON THIS LINE session.Flush(); 然后爆炸……它打破了 [AssertionFailure: null identifier] NHibernate.Engine.EntityKey..ctor(Object […]

nhibernate Antlr.Runtime.NoViableAltException

return NHibernateSession.CreateQuery(@”TRUNCATE TABLE dbo.Exceptions”).ExecuteUpdate(); 抛出了类型’Antlr.Runtime.NoViableAltException’的exception。 [TRUNCATE TABLE Exceptions]描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 exception详细信息:NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:抛出了类型为“Antlr.Runtime.NoViableAltException”的exception。 [TRUNCATE TABLE例外] 来源错误: 知道为什么吗?

nHibernate在多个线程上枚举相同的集合

我有一个生产应用程序(IIS8,MVC5,nHibernate DAL),我注意到最近的高CPU使用率。 循环应用程序池修复它但在从服务器进行一些诊断和内存转储以分析问题后,我注意到多个线程的一致模式试图枚举相同的集合。 最常见的一点是应用程序检查用户角色的位置。 我怀疑这可能更多的是这个代码是为每个validation权限的请求运行的,所以它更可能是它被卡住的集合? public IList GetRoles(string username) { var login = GetLoginForUser(username); return !login.Groups.Any() ? new List() : login.Groups.SelectMany(x => x.Roles).OrderBy(x => x.DisplayName).ToList(); } 我的CurrentUser对象有一个简单的接口,包含从依赖项解析器注入的用户的详细信息。 我已经validation了UserId存在且有效,这一切都非常简单。 当我看到这两个请求被挂起的转储时,我得到一个警告,多个线程正在枚举一个集合。 当我检查转储中的两个线程时,我看到几乎相同的堆栈跟踪。 (我已经在堆栈跟踪中重命名了一些命名空间细节,但它没有改变)。 两个请求中的userId(和结果配置文件)是相同的,因此它似乎是由于两个单独的线程试图在几乎同时从数据库加载相同的对象。 堆栈跟踪在下面,但我不知道从这里去哪里以解决这个问题。 System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib],[System.Nullable`1[[System.Int32, mscorlib]], mscorlib]].FindEntry(System.__Canon)+129 System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib],[System.Nullable`1[[System.Int32, mscorlib]], mscorlib]].TryGetValue(System.__Canon, System.Nullable`1 ByRef)+12 NHibernate.AdoNet.ColumnNameCache.GetIndexForColumnName(System.String, NHibernate.AdoNet.ResultSetWrapper)+25 NHibernate.AdoNet.ColumnNameCache.GetIndexForColumnName(System.String, NHibernate.AdoNet.ResultSetWrapper)+25 NHibernate.AdoNet.ResultSetWrapper.GetOrdinal(System.String)+e NHibernate.AdoNet.ResultSetWrapper.GetOrdinal(System.String)+e NHibernate.Type.NullableType.NullSafeGet(System.Data.IDataReader, System.String)+29 NHibernate.Type.NullableType.NullSafeGet(System.Data.IDataReader, System.String[], NHibernate.Engine.ISessionImplementor, System.Object)+16 […]

使用Fluent NHibernate映射大字符串

我正在使用Oracle DB,我正在尝试映射这个类: public class Book { public virtual int Id { get; private set; } public virtual string Author { get; set; } public virtual string Title { get; set; } public virtual string Text { get; set; } } 使用此映射类: public class BookMap : ClassMap { public BookMap() { Id(x => x.Id); Map(x => […]

什么是合适的NHibernate / Iesi.Collections.Generic.ISet 替换?

在最新版本的Iesi.Collections中缺少Iesi.Collections.Generic.ISet。 似乎有三种选择: LinkedHashSet ReadOnlySet SynchronizedSet Iesi.Collections.Generic.ReadOnlySet似乎最接近ISet,文档说明: … although it’s advertised as immutable it really isn’t. Anyone with access to the wrapped set can still change the set. 似乎ReadOnlySet是ISet的最佳替代品? 目前,实现是通过公共方法向集合添加项目,因此它似乎是最合适的。 替代方案(IList,bag?)似乎需要更多资源或不那么快/有效)? 还有更好的选择吗? (该列表不应该有重复,可以手动validation) 我会做的事情如下: public virtual ISet MyClass { get { return this.myClass } } public virtual void AddItem(MyClass item) { … // Null checks and […]

如何从Type中获取NHibernate.Type.IType?

我尝试执行以下操作: hibQuery.SetParameter(“MyParameter”, valueObject, valueType); 唯一的问题是此方法在第三个参数中需要NHibernate.Type.IType ,但valueType的类型为Type 。 我怎么能把它转换为IType? 任何tipps sl3dg3的thx