Tag: nhibernate mapping

nhibernate 4.0中的双向关系

我有一个代码在NHibernate 3.1上完美运行,但是当它不能在NHibernate 4.0上运行时 所以,这就是阶级关系 public class Employee : BaseEntity { … public Department Dept { get; set; } } public class Department : BaseEntity { … public IList Employees { get; set; } } 对于映射,我们有这个 DepartmentMap : ClassMap { Table(“….”); HasMany(x => x.Employees).KeyColumn(“DeptId”).Not.KeyNullable(); } EmployeeMap : ClassMap { Reference(x => x.Dept).Column(“DeptId”); } 当我添加这样的员工时 var dept […]

NHibernate标准与不同的父负载所有孩子?

我有一个父子关系,我想只返回一个父母并加载所有孩子。 我正在使用标准,因为它是一个动态查询。 var messageQueueId = this.GetPropertyName(x => x.Id); var query = _sessionManager.Session.CreateCriteria(QUEUE_ALIAS); query.SetFirstResult(_pageOffset); query.SetMaxResults(_pageSize); query.Add(Restrictions.In(messageQueueId, _messageQueueIds)); query.List(); 这将返回父(MessageQueue),但不返回它的子(SearchMatches)。 当我尝试这样做时: var query = _sessionManager.Session .CreateCriteria(QUEUE_ALIAS) .CreateAlias(this.GetPropertyName(x => x.SearchMatches) , MATCH_ALIAS, JoinType.LeftOuterJoin); 然后我让孩子们装满了,但我也收到了重复的父母。 我理解为什么会这样。 但是我不明白如何让第一个场景自动加载SearchMatches? 以下是我的权利: public class MessageQueue : EntityBase { … public virtual IList SearchMatches { get; set; } … } public class SearchMatch : […]

NHibernate Collection子查询

有没有办法为NHibernate的映射添加标准? public class Course { public IList Participants { get; set; } public IList ActiveParticipants { get; set; } } 第二个属性ActiveParticipants应该是其“状态”设置为“活动”的参与者列表。 否则,有没有办法对该类进行后处理,但仍然保持延迟加载,因为有时不会使用“ActiveParticipants”属性。 它需要像这样而不是使用LINQ的原因是将类注入到动态“Mustache”模板中,该模板仅适用于标准属性。 还有几个这样的类似属性。

MappingException:没有持久性 – NHibernate – 持久化适配器

好吧,我google了很多,并在那里找到了相同的建议(将hbm设置为嵌入式资源,在hibernate.cfg中添加hbm等等),尽管如此,我仍然没有得到它。 让我解释一下:我为检票口设备写了一个Communication Dll,我有一个配置模型类,用于通过TCP / IP配置该设备。 但是现在,我必须在DB上保留这个对象,所以我在我的模型中写了一个适配器,它将一个粘合到另一个。 这样,我的配置模型的适配器具有ID,IncludedDate等。 让我们来看看: DeviceConf Model类: public class DeviceConf : BaseModel // which have ID, IncludedDate, etc { private TGCommHelper.Entities.Configuration.TicketGateConfig _conf; public TGCommHelper.Entities.Configuration.TicketGateConfig conf { get { return _conf; } private set { _conf = value; } } public DeviceConf() { conf = new TGCommHelper.Entities.Configuration.TicketGateConfig(); } public DeviceConf(TGCommHelper.Entities.Configuration.TicketGateConfig config){ conf = […]

使用流畅的nhibernate映射实体oneToMany

问题似乎很简单但是我在尝试映射这些实体时遇到了很多麻烦。 我只是看不出我做错了什么。 你们能帮助我吗? 我有课堂Cliente : public class Cliente { public Cliente () { } public virtual int ClienteId { get; set; } public IList ListaMedidores { get; set; } public virtual string NumeroMedidor { get; set; } } 并且上课Medidor public class Medidor { public Medidor() { } public virtual string NumeroMedidor { get; set; } […]

如何在Fluent NHibernate中映射受保护的集合?

我已尝试在Fluent中使用Reveal属性,但我无法使用集合进行编译。 我希望实体中的一个集合受到保护,除了实体本身之外的任何地方都无法访问。 这可能吗? 谢谢 编辑: 这是我正在尝试使用的代码, HasMany(x => Reveal.Property(“_trips”)); 我也尝试过这段代码, HasMany(Reveal.Property(“_trips”)); 每次我的应用程序运行时,NHibernate都说它无法映射到“Property”或者它会抛出一个未知的exception。

在NHibernate中查询未映射的列

我有一个使用NHibernate映射到表的类。 问题是只有部分属性映射到表中的列。 这很好,因为我们用于显示的唯一列是映射的,但我想知道是否有任何方法可以查询表中未映射到我的类中的属性的其他列。 例如,我们有一个包含以下列的表: Customer ———– CustomerId Name DateCreated 我们有一个对象 public class Customer { public virtual int CustomerId {get;set;} public virtual string name {get;set;} } 并且name和customerId被映射,但DateCreated不是因为我们从不在任何地方显示它。 我们想在Customer表中查询由特定日期创建的客户。 如果没有映射DateCreated有没有办法做到这一点? 此外,最好使用条件API执行此操作。

NHibernate映射 – 一对一(或一对零)

NHibernatians! 我有一张桌子[dbo]。[Wibble]和另一张桌子[dbo]。[WibbleExtended]。 [Wibble]是主表,[WibbleExtended]是一个可选表,其中存储了一些其他字段。 [WibbleExtended]表中的条目远少于主[Wibble]表。 我认为这是在当天完成的,以解决一些空间问题(Wibble有很多行,而WibbleExtened有很多列)。 每个表的ID都是相同的,来自外部源。 即 [dbo].[Wibble].[WibbleId] 和 [dbo].[WibbleExtended].[WibbleId] 是相同的,这两个表是如何相关的。 NB我无法更改架构。 我把它变成了一个我几乎无法控制的遗留系统。 在它周围搜索似乎一对一映射是有问题的,并且流行的智慧是使用两个多对一映射。 我的映射目前是: 和 这个问题是我遇到了诸如此类的错误 System.IndexOutOfRangeException: Invalid index n for this SqlParameterCollection with Count=n. 我环顾四周,这看起来像是正确的策略,它只是落在最后的障碍。 问题是id生成器吗? 映射的其他方面? 正确答案的免费碎肉馅饼。 编辑:好的 – 这就是我通过@James Gregory解决这个问题的方法。 将unit testing从WibbleExtended测试移至Wibble测试类并进行必要的修改。 在Wibble.hbm.xml中添加了以下内容 为Wibble POCO添加了相应的属性。 删除了与WibbleExtended相关的所有代码。 运行测试,全部通过,签入。构建通过。 去了一个圣诞节啤酒(因此,在我更新这个之前已经过了几天!:-))

流畅的nhibernate – 具有属性的多对多映射

我有2个主表,它们通过地图表链接如下 User [UserId,Name] Resource [ResourceId,Name] UserResourceMap [UserId,ResourceId,AccessLevel] 具有AccessLevel的Resource和User ClassMap如何作为资源属性? 我的Domain类看起来像这样 public class User { public virtual int UserId { get;protected set; } public virtual string Name { get;set; } } public class Resource { public virtual int ResourceId { get;protected set; } public virtual string Name { get;set; } public virtual string AccessLevel { get;set; […]

NHibernate映射与类层次结构,其基类是抽象的,鉴别符不是字符串

以下是域模型类: public abstract class BaseClass { … } public class ChildClass : BaseClass { … } 请注意,父类是抽象的,这使得我在使用流畅的nhibernate进行映射时遇到了一些困难。 我的鉴别器是一个字节(DB中的tinyint)。 因为它不是一个字符串而我无法在基类上设置一个鉴别器值,所以这不起作用(取自BaseClass的映射类): DiscriminateSubClassesOnColumn(“Type”) .SubClass() .IsIdentifiedBy((byte)OperationType.Plan) .MapSubClassColumns(p => { … }) 我得到的错误信息是: 类初始化方法UnitTest1.MyClassInitialize引发exception。 NHibernate.MappingException:NHibernate.MappingException:无法将鉴别器值格式化为实体的SQL字符串BaseClass —> System.FormatException:输入字符串格式不正确.. 以下post似乎解释了会发生什么。 他们给出了一个xml的解决方案,但没有流利的nhibernate: http : //forum.hibernate.org/viewtopic.php? t = 974225 谢谢您的帮助。