Tag: nhibernate

软删除Nhibernate

我想在我的数据库表上进行软删除…我已经应用了以下语句(如此处所述http://nhibernate.info/blog/2008/09/06/soft-deletes.html并且在很多问题中在SO)。 Fattura是我的表,我想应用逻辑删除(没有触发器) Fattura.hbm.xml Fattura.cs – 模型对象 using System; namespace ModelObject { public class Fattura : ISoftDeletable { public virtual int Id_Fattura { get; set; } public virtual Int16 Id_Tipo_Fattura { get; set; } public virtual Int16 Cancellato { get; set; } } } 删除事件监听器 public class MyDeleteEventListener : DefaultDeleteEventListener { protected override void DeleteEntity(IEventSource session, […]

渴望在NHibernate中加载儿童和儿童collections品

我有一个NHibernate试图加载一个小的数据层次的问题。 我的域名模型如下: class GrandParent { int ID{get;set;} IList Parents {get; set;} } class Parent { IList Children {get; set;} } class Child { } 而且我想为所有父母和孩子加载一份特定的GrandParent。 此Linq-to-NH查询创建正确的SQL并按预期加载GrandParent :(该示例假定祖父母有2个父母,每个父母有2个子对象 – 总共4个子对象)。 var linq = session.Linq(); linq.Expand(“Parents”); linq.Expand(“Parents.Children”); linq.QueryOptions.RegisterCustomAction(c => c.SetResultTransformer(new DistinctRootEntityResultTransformer())); var grandparent = (select g from session.Linq() where g.ID == 1 select g).ToList(); Assert(grandparent.Count == 1); […]

NHibernate中的子表

在NHibernate中有什么方法我可以使用以下实体 public class Person { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual IList Pets { get; set; } } public class Pet { public virtual int Id { get; set; } public virtual string Name { get; set; } } 并且不必在Person上创建“特殊”AddPet方法以便保存Child宠物。 public void AddPet(Pet […]

如何在C#中传递Nhibernate中的两个连接字符串?

我在我的应用程序中遇到问题:我有两个数据库,我想用NHibernate访问它们,但在配置文件中我只有一个数据库的连接字符串。 那么如何将多个连接字符串传递给NHibernate呢?

无法使用NHibernate登记分布式事务

我在unit testing中看到一个问题,其中Oracle被抛出exception,消息“无法在分布式事务中登记”。 我们正在使用ODP.net和NHibernate。 在嵌套事务中对数据库进行一定数量的提交后,问题就出现了。 令人讨厌的是,这在连续集成服务器(Windows Server 2003 R2 SP1)上失败了,而不是在我的开发机器(XP SP2)上。 这是该问题的一个小问题: using (new TransactionScope()) { for (int j = 0; j < 15; j++) { using (var transactionScope = new TransactionScope(TransactionScopeOption.Required)) using (var session = sessionFactory.OpenSession()) { for (int i = 0; i < 200; i++) { var obj = [create new NHibernate mapped obj] […]

NHibernate.Mapping.ByCode.Conformist.ClassMapping和FluentNHibernate.Mapping.ClassMap有什么区别?

我正在学习NHibernate,我学到的类映射是用XML完成的。 据我所知,Fluent NHibernate是XML格式映射的强类型替代品。 实际上,这里是fluent-nhibernate标签描述: Fluent NHibernate允许您在强类型C#代码中编写NHibernate映射。 这允许轻松重构,提高可读性和更简洁的代码。 后来我使用NHibernate Mapping Generator从我现有的数据库创建映射和域类,它生成了这样的映射代码: using NHibernate.Mapping.ByCode.Conformist; using NHibernate.Mapping.ByCode; namespace MyNamespace.Infrastructure.Mappings { public class MyItemMapping : ClassMapping { public MyItemMapping() { Table(“MyItems”); Schema(“master”); Lazy(true); Id(x => x.ID, map => map.Generator(Generators.Assigned)); Property(x => x.Status, map => map.NotNullable(true)); Property(x => x.DueDate, map => map.NotNullable(true)); Property(x => x.NextReminderDate); Property(x => x.DatePaid); Property(x => […]

NHibernate 2.1.2中等信任

我正在尝试配置nhibernate 2.1.2以中等信任运行,没有任何运气。 我已经尝试过将这些建议用于中等信任并预先生成代理 。 然后我尝试删除对延迟加载的所有引用,在所有类和包上设置default-lazy =“false”。 但是,这引发了一个exception,要求我配置proxyfactory.factory_class 这些方法都不起作用,因为它们不断抛出通用安全性exception或抛出库,不允许AllowPartiallyTrustedCallers。 如果我想以中等信任的方式运行,我是否使用了错误版本的NHibernate? 是否有一组特定的二进制文件或源代码,我应该使用它们。 更新: 我设法使用carl提到的城堡项目邮件列表中提到的步骤来使用它。 除此之外,我还必须禁用为castle和nhibernate库生成调试信息。 我写了一个快速指南,介绍了我可以在这里找到的步骤

Nhibernate.Linq:用Where(Expression <Predicate >)限制查询结果

我使用NHibernate查询我的数据库。 现在我需要使用谓词限制所选数据。 到目前为止,我发现(Google驱动开发的最佳状态)使用Expressions和NHibernate.Linq可以实现这样的function。 这是我尝试过的: public IList GetAll(Predicate predicate) { Expression<Func> restriction = x => predicate(x); ISession session = SessionService.GetSession(); IList bestellungen = session.Query() .Where(restriction).ToList(); return bestellungen; } 这导致无法将类型为’NHibernate.Hql.Ast.HqlCast’的对象转换为’NHibernate.Hql.Ast.HqlBooleanExpression’ 。 只需快速检查它的位置:将方法体的第一行更改为 Expression<Func> restriction = x => x.Id!=1; 令人惊叹的结果是一切正常。 如何在表达式中执行我的Predicate?

发布版本中的nunit:“公共语言运行时检测到无效程序。”

我将软件从vs2008 / .net 3.5升级到vs2010 / .net 4.0。 所有第三方库(最相关:nhibernate 2.1.2或3.0.0,nunit 2.5.2)仍然使用vs2008进行编译。 当我运行我们软件的调试版本的unit testing时,一切正常。 在发布版本中,nunit报告228个测试中的33个的exception: System.InvalidProgramException : Common Language Runtime detected an invalid program. 对于nunit-console和Resharper 5.0测试运行器,它总是在相同的测试中发生。 当我使用Resharper“debug unit-tests”命令运行它们时,所有测试都通过。 无论是单独运行还是批量运行,都没有区别。 exception总是发生在nhibernate查询调用附近,但我不能肯定地说,因为发布构建堆栈跟踪有点稀疏。 它不依赖于nhibernate字节码生成器,对于castle和linfu也会出现相同的exception。 有谁知道如何调试这个? 编辑:删除Spring.NET对此问题没有影响。 编辑:当我将release config debug输出切换为full而不是pdb并停用优化代码复选框时,exception消失。 这两个设置都是必需的,如果我只改变其中一个,那么bug仍然存在。 但是,如果我只更改一个,则会有一组不同的测试失败。 所有类库都是针对Any CPU编译的。

如何使用NHibernate Projections检索集合

我懒得加载集合,还因为person表中有这么多字段,我正在编写一个投影函数来检索某些属性。 它适用于属性,而不适用于其他实体的集合。 如果它们作为代理加载我会很好,我可以稍后得到它们,但现在它只是加载null。 public IList ListTop40() { var list = _session.CreateCriteria(typeof(Person)) .SetProjection(Projections.ProjectionList() .Add(Projections.Property(“FirstName”)) .Add(Projections.Property(“LastName”)) .Add(Projections.Property(“Jersey”)) .Add(Projections.Property(“FortyYard”)) .Add(Projections.Property(“BenchReps”)) .Add(Projections.Property(“VertJump”)) .Add(Projections.Property(“ProShuttle”)) .Add(Projections.Property(“LongJump”)) .Add(Projections.Property(“PersonSchoolCollection”)) ) .List() .Select(l => new Person() { FirstName = (string)l[0], LastName = (string)l[1], Jersey = (Decimal)l[2], FortyYard = (Decimal)l[3], BenchReps = (Decimal)l[4], VertJump = (Decimal)l[5], ProShuttle = (Decimal)l[6], LongJump = (Decimal)l[7], PersonSchoolCollection = (IList)l[8]}); […]