Tag: nhibernate

将类型传递给generics方法(嵌套generics)

如果我没有TRootEntity ,我怎么能调用以下方法,但只有它的TYPE : public void Class(Action<IClassMapper> customizeAction) where TRootEntity : class; 最终目标是运行以下代码 var mapper = new ModelMapper(); mapper.Class(ca => { ca.Id(x => x.Id, map => { map.Column(“MyClassId”); map.Generator(Generators.HighLow, gmap => gmap.Params(new { max_low = 100 })); }); ca.Property(x => x.Something, map => map.Length(150)); }); 它用于创建动态NHibernate HBM 。 这里有更多信息 相关问题请参见此处和此处 。

NHibernate代码生成

我正在使用NHibernate和一些代码生成工具。 MyGeneration是一个,SmartCode是另一个。 之前已经问过这个问题,但我已经看了一些其他的响应,发现nHibernate空间中的代码生成工具非常差。 我可能能够使用MyGeneration和SmartCode,但是你有没有其他可能的用途,并且会推荐? 我想我的标准是他们必须使用MSSQL 2008,目前正在开发的工具也会很好,因为似乎某些工具不再被积极开发。 理想情况下,这些工具也会生成域对象,还有nhibernate映射文件 – Fluent nhibernate会很好但不是必需的。 如果可以调整代码生成的模板和方法,那将是很好的。 我是一名开发人员,所以很高兴能够通过合适的工具进行更改。 谢谢。

如何在NHibernate中查询存储为枚举的标志

如何进行HQL或Criteria搜索(后者是首选),涉及用作标志的枚举。 换句话说,我有一个持久的枚举属性,存储某种标志。 我想查询所有设置了这些标志之一的记录。 使用Eq当然不会起作用,因为只有那是唯一的标志才会成立。 使用Criteria API解决这个问题是最好的,但是如果只使用HQL这样做也很好。

NHibernate和收集计数

我使用NHibernate进行持久化的以下类设置 public class Person { public string Name { get; set; } public IList Subordinates { get; set; } } 现在说我有一个带有两列的网格,“Name”和“Number of Subordinates”在NHibernate中执行此操作的最佳方式是什么,同时尽可能保留域对象的使用。 谢谢

nHibernate会话和multithreading

我有一个方法,有很多持久性调用使用nHibernate会话,它工作,没关系。 但是出于multithreading的原因,我需要重构这个方法,从循环内的内容中提取方法。 然后我用这个方法创建了一个类。 它就像一个正常的重构,但是这个方法调用中的nHibernate会话被破坏了,没有上下文,我没有随时完成它。 multithreading有nHibernate问题吗? 即使我只有一个线程正在执行,我也有同样的问题。 我通过SessionFactory和Façade模式使用nHibernate Session,这意味着,会话不是这些对象的字段,它在SessionFactory是全局的。 让它更清晰一点: 之前: Method() { … persistence calls foreach(Thing..) { …persistence calls for each thing (1) } … } 后: Method() { … persistence calls foreach(Thing..) { create a thingResolver object with some data open a new thread with thingResolver.Method (1) starts this thread } .. waits for […]

流畅的nhibernate – 在同一实体上的多对多关系映射

我在尝试绘制多对多关系时遇到问题,其中关系的两侧都引用同一个实体。 我正在使用Fluent NHibernate和NH3.1。 基本上,情况是这样的 – 我有一个类别,可以有多个父母。 因此,一个类别有多个其他类别作为父类,以及多个其他类别作为其子类。 HasManyToMany(x => x.ParentCategories).AsBag().Table(“parentcategorychildren”).ParentKeyColumn(“ChildID”).ChildKeyColumn(“ParentID”).Cascade.SaveUpdate(); HasManyToMany(x => x.ChildrenCategories).AsBag().Table(“parentcategorychildren”).ParentKeyColumn(“ParentID”).ChildKeyColumn(“ChildID”).Inverse(); 但是,当我尝试构建工厂时,我收到以下错误: Category.ChildrenCategories与Category.ChildrenCategories的关系在双方都指定了Inverse。 从关系的一侧移除反向。 我发现奇怪的是为什么它提到Category.ChildrenCategories的“Category.ChildrenCategories”,而不是ParentCategories? 任何帮助将不胜感激 ! 我刚刚为此创造了一笔赏金,因为它对我来说非常重要。 拜托,我对“你不能这样做”作为答案不感兴趣。

使用Moq模拟NHibernate ISession

我正在使用NHibernate,ASP.NET MVC 2.0和StructureMap开始一个新项目,并使用NUnit和Moq进行测试。 对于我的每个控制器,我都有一个公共构造函数,其中注入了一个ISession。 应用程序本身工作正常,但就unit testing而言,我基本上必须模拟一个ISession才能测试控制器。 当我尝试使用MOQ模拟ISession时,我收到以下错误消息: 中间调用仅支持属性访问 看来我的问题是期待来自框架CreateQuery方法的用户列表,但在谷歌搜索问题之后我现在更清楚了。 我有两个问题: 1)这是模拟dependency injectionISession的错误方法吗? 2)有没有办法修改代码,以便它可以成功返回我的列表 [Test] public void DummyTest() { var mock = new Mock(); var loc = new Mock(); loc.SetupGet(x => x.ID).Returns(2); loc.SetupGet(x => x.FirstName).Returns(“John”); loc.SetupGet(x => x.LastName).Returns(“Peterson”); var lst = new List {loc.Object}; mock.Setup(framework => framework.CreateQuery(“from User”).List()).Returns(lst); var controller = new UsersController(mock.Object); var result = […]

NHibernate和奇怪的“Session is Closed!”错误

注意:现在我输入了这个,我不得不为超长问题道歉,但是,我认为这里提供的所有代码和信息在某种程度上都是相关的。 好吧,我在ASP.NET webforms应用程序的随机点上得到奇怪的“Session Is Closed”错误。 然而,今天,它终于在同一个地方一次又一次地发生。 我几乎可以确定在我的代码中没有任何处理或关闭会话,因为使用的代码位远远超出了所有其他代码,如下所示。 我也使用ninject作为我的IOC,这可能/可能不重要。 好的,首先是我的SessionFactoryProvider和SessionProvider类: SessionFactoryProvider public class SessionFactoryProvider : IDisposable { ISessionFactory sessionFactory; public ISessionFactory GetSessionFactory() { if (sessionFactory == null) sessionFactory = Fluently.Configure() .Database( MsSqlConfiguration.MsSql2005.ConnectionString(p => p.FromConnectionStringWithKey(“QoiSqlConnection”))) .Mappings(m => m.FluentMappings.AddFromAssemblyOf()) .BuildSessionFactory(); return sessionFactory; } public void Dispose() { if (sessionFactory != null) sessionFactory.Dispose(); } } SessionProvider public class SessionProvider […]

在multithreadingWindows服务应用程序中使用的最佳NHibernate会话管理方法是什么?

我有一个使用multithreading的Windows服务应用程序。 我在这个应用程序的数据访问层使用NHibernate。 您对此应用程序中的会话管理有何建议? 我读到了UNHAddins,这是一个很好的解决方案吗?

使用流利的nhibernate时,我做错了很多次吗?

我有两个主要实体(数据库表) 项目 应用 我有一个名为ProjectApplication的桥表,带有3列(Id,ProjectId,ApplicationId) 一个项目可以有很多应用程序。 应用程序可以在很多不同的项目下面 您的基本多对多映射 目前这是我在流利的nhibernate映射文件中设置的 public class ProjectMap { HasMany(x => x.ProjectApplications) .AsBag().Inverse().Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(80); } public class ApplicationMap { HasMany(x => x.ProjectsApplications) .AsBag().Inverse().Fetch.Select().BatchSize(50); } 这是否有任何缺点,因为我看到有一个HasManyToMany语法所以我不确定它是否在生成的查询或性能等方面有所作为 请指教