Tag: fluent nhibernate

nHibernate HQL – 未映射实体

对于大多数查询,我有我的nHibernate设置并且正确使用QueryOver,但是,每当我尝试执行HQL CreateQuery时,我都会得到实例未映射的exception。 我可以使用QueryOver确认相同的实体正常工作。 注意:我使用的是流畅的nHibernate 任何想法会导致什么?

NHibernate / Fluent NHibernate动态列映射

我有一个表,其中一些列在编译时是未知的。 这些列可以是整数值,也可以是某个枚举值。 有一个表包含此类动态列的所有名称,并且还包含列的类型。 这个“metatable”有以下几列: DynamicColumnId(Pk) 名称 TypeId(整数/枚举,从单独的表中作为Fk) 整数列具有此表中的名称 ,而Enum列是来自具有该名称的表的Fk列,具有一些修改(例如“DynamicTable”前缀)。 我能想到的唯一解决方案是使用Reflection.Emit动态创建一个Entity类和一个相应的Mapping类。 不可否认,我是NHybernate / Fluent NHybernate的新手,它似乎是表之间相对简单的层次结构,所以我想validation我的解决方案并不像最初看起来那样难看…… 我也欢迎完全忽略我的表层次结构的解决方案,以便有效地实现相同的结果(即,枚举动态表上的行,遍历所有列,知道它们是否是枚举,如果它们是,他们可能的价值观)。 ( 编辑:附加信息问题域 )我最初包含最少的细节,以避免太多信息相关的混淆。 这种描述要复杂得多,但它揭示了这种设计背后的动机。 涉及的应用程序旨在自动化日志/转储分析。 分析场景经常由日志/转储专家提供,因此,为了简化需求=>实现=>validation周期的典型过程,这些分析场景由专家直接实现为Iron Python代码片段,一些特定于域的构造注入到片段的范围内。 每个片段都有一个与其相关的“上下文”。 “上下文”的一个例子可能是“产品”,“版本”等……所以,代码片段本身只在某些上下文中调用 – 这有助于通过消除分支来简化Python代码(您可以将其视为面向方面编程, 在某种程度上)。 在为各种上下文选择值之后,非专家可以使用具有给定代码上下文数据库的应用程序来分析日志/转储。 当专家决定为某个代码片段编目需要新的上下文时,他可以添加一个上下文,指示它可能具有的值。 将新上下文添加到数据库后,将为运行分析的非专家提供为新添加的上下文选择值的选项。 “动态表”是将代码段与发布代码段时存在的各种上下文(列)的值相关联的表,以及当时不存在的列的默认值。

与Fluent Nhibernate建立一对多的关系

我和我的同事有点争吵,我似乎无法找到答案,但这是非常基本的东西。 在Fluent Nhibernate实体中建立一对多关系。 我们以Roles和用户为例。 可以将角色分配给多个用户,这样我的实体内容就像: public class User { [Required] public virtual string FirstName { get; set; } public virtual Role Role { get; set; } } 和角色 public class Role { [Required] public virtual string Name { get; set; } public virtual IList Users{ get; set; } public Role() { Users = new List(); […]

NHibernate IQueryable集合作为root的属性

我有一个根对象,其属性是一个集合。 例如: I have a Shelf object that has Books. // Now public class Shelf { public ICollection Books {get; set;} } // Want public class Shelf { public IQueryable Books {get;set;} } 我想要完成的是返回一个IQueryable的集合,这样我就可以直接从父节点运行分页和过滤集合。 var shelf = shelfRepository.Get(1); var filtered = from book in shelf.Books where book.Name == “The Great Gatsby” select book; 我希望NHibernate专门执行该查询,而不是全部加载整个集合然后在内存中解析它(这是当我使用ICollection时当前发生的事情)。 这背后的原因是我的collections可能是巨大的,成千上万的记录,并且所有查询都可以打击我的数据库。 […]

映射接口或抽象类组件

请考虑以下简单用例: public class Foo { public virtual int Id { get; protected set; } public virtual IBar Bar { get; set; } } public interface IBar { string Text { get; set; } } public class Bar : IBar { public virtual string Text { get; set; } } 和流畅的nhibernate地图类: public class FooMap : ClassMap […]

NHibernate – not-null属性引用null或transient值

我收到此exception(底部的完全例外): NHibernate.PropertyValueException was unhandled by user code Message=”not-null property references a null or transient valueClearwave.Models.Encounters.Insurance.Patient” Source=”NHibernate” EntityName=”Clearwave.Models.Encounters.Insurance” PropertyName=”Patient” 我已经做了很多谷歌搜索,似乎这个错误最常见的原因是当一个关联是双向的,但只设置了一半。 如:保险。患者=患者被叫,但是Patient.Insurances.Add(保险)不是。 事实上,我确实有这样的场景但我在调用Save之前检查了对象,并且Insurance.Patient和Patient.Insurances [0]都是正确的对象。 此exception似乎引用的另一种可能性是瞬态值。 在我的情况下, 每个对象都是暂时的,所以我怀疑问题的根源在这里。 但是,现在一切都需要暂时,因为还没有保存。 我希望NHibernate能够持久存在而不是抱怨它们不会被持久存在。 以下是我映射的一些片段(流利): public PatientMap() { WithTable(“tPatient”); Id(x => x.Id, “uid_Patient”).GeneratedBy.GuidComb ().Access.AsReadOnlyPropertyThroughCamelCaseField(); HasMany(x => x.Insurances).WithKeyColumn(“uid_Patient”) .Cascade.All() .Inverse(); … } public InsuranceMap() { WithTable(“tPatientInsuranceInfo”); Id(x => x.Id, “uid_PatientInsuranceInfo”).GeneratedBy.GuidComb ().Access.AsReadOnlyPropertyThroughCamelCaseField(); References(x => […]

带参数化IN子句的FluentNHibernatefilter

在Fluent NHibernate中,是否可以将参数添加到List类型的filter中,以便过滤条件生成WHERE SomeColumn IN (@x, @y, @z) ? 我的用例是根据发票的ID和发票行号列表获取发票及其行的子集。 我想急切地在与发票相同的往返途中获取线路。 我假设它是这样做的,但我找不到参数类型的正确类型声明: 域对象: public class Invoice { public int Id {get;set;} public List Lines {get;set;} } public class InvoiceLine { public int Id {get;set} public int LineNumber {get;set;} } 映射: public class InvoiceMap : ClassMap { public InvoiceMap() { Id(x => x.Id); HasMany(x => x.Lines).ApplyFilter(); } […]

用NHibernate和PostgreSQL引用列名

我已经开始使用NHibernate 3.0和PostgreSQL进行一个小项目,到目前为止,由于NHibernate站点已关闭,这个过程有点粗糙,我确信这个答案在他们的网站上。 我有一个包含这两列的数据库(当然在实际表中还有更多): int ID String Feature 现在我使用FluentNHibernate进行映射,所以这样的事情: public class MyEntityMap: ClassMap { public MyEntityMap() { Id(x => x.ID); Map(x => x.Feature); } } 和一个LINQ查询来获取数据 var strucs = from str in session.Query() where str.ID < 5 select str; 查询将生成正确的SQL语句。 问题是,因为我的列名中有大写字母,你必须用引号将它们包装起来,但生成的SQL代码看起来像这样: SELECT this_.ID as ID0_0_, this_.feature as feature0_0_, FROM “MyEntity” this_ WHERE this_.ID < 5 列中没有引号。 […]

NHibernate.LazyInitializationException

我们偶尔会出现这个问题,但现在我每次都可以重现它。 我在自定义构建的论坛上增加了一个视图计数器,这会导致错误: NHibernate.LazyInitializationException:无法懒惰地初始化集合,没有会话或会话被关闭 在对象中的另一个集合上发生此错误。 如果我添加: .Not.LazyLoad() 对于我的Fluent映射,错误在我的项目周围移动。 我一直禁止对对象的延迟加载,直到它没有延迟加载的地方,然后它抛出了这个错误: NHibernate.LazyInitializationException:无法初始化代理 – 没有会话。 所以,然后我在懒惰的装载上取出了遗嘱,现在我又恢复了原点。 当我递增此视图计数器时,它只会出错。 这是我的基类保存代码的片段: using (ISession session = GetSession()) using (ITransaction tx = session.BeginTransaction()) { session.SaveOrUpdate(entity); tx.Commit(); } 环顾四周,我在另一篇文章中读到这些交易可能会导致问题,但这是因为它们被放置在哪里。 此代码扩展到与我的域对象(存储库类)分开的类。 这是post: hibernate:LazyInitializationException:无法初始化代理 我不相信这是我的问题。 这是第一个抛出错误的集合的流畅映射。 还有其他几个类似的集合。 HasManyToMany(x => x.Votes) .WithTableName(“PostVotes”) .WithParentKeyColumn(“PostId”) .WithChildKeyColumn(“VoteId”);

多列多对一

我有一个遗留数据库和两个表之间的一对一关系。 关键是关系使用两列,而不是一列。 有没有办法在nhibernate中说,当获取一个被引用的实体时,它在join语句中使用了两列,而不是一个? 我有一个类似的表结构 TaskProgress ProgressId 任务id AssignmentId 用户身份 任务 任务id AssignmentId 任务名称 每个任务都可以在不同的任务中进行分配。 这意味着任务进度的唯一任务只能由AssignmentId和TaskId字段建立。 我想用这个: References(x => x.Template) .Columns() .PropertyRef() 但无法获得如何在多列上映射连接,任何想法?