使用NHibernate查询的最佳实践

在使用其他技术(和)几年之后,我又回到了使用NHibernate,我发现这个查询有点令人沮丧,尤其是与亚音速相比。我想知道人们在用什么方法 我觉得Hibernate查询语言不太合适,似乎太像编写SQL了,在我看来,这是使用ORM工具的原因之一,所以我不必这么做,而且它都是XML的,这意味着它不适合重构,只有在运行时才会发现错误 条件查询,似乎不够流畅 我知道Ayende的,是一个有用的工具,这是人们正在使用的吗?外面还有什么 编辑:值得一读 NHibernate的LINQ产品仍处于测试阶段;我很

NHibernate单向一对多映射问题

我在NHibernate有一个场景,在实体雇员和雇员状态之间有一对多的关系 员工拥有ID、姓名和EmployeeStatus的IList等属性,而EmployeeStatus在本问题中只有自己的ID和一些自由文本 我不需要持有EmployeeStatus中对Employee的引用,状态的管理“将完全通过Employee实体完成-添加到IList属性。IE:我想简单地做到以下几点: Employee e = new Employee(); e.Name = "Tony"; e.StatusList

配置何时加载nHibernate?

我读到,配置的初始加载时间在nHibernate中可能相当长,这取决于映射表的大小等 是否只执行一次并存储在会话或缓存中? 是否每次ASP.NET进程回收时都会发生这种情况?使用配置来构建ISessionFactory。这是一个一次性交易-将在应用程序启动时发生。配置对象通常与ISessionFactory关联。如果有很多映射正在生成(通过调用cfg.BuildSessionFactory),那么会话工厂可能会很慢。这就是为什么只需要构造一次会话工厂,并在整个应用程序中使用它的原因。在ASP.N

Nhibernate映射:在对象中封装列表

我有两个表Deal和Cost。成本可以有多种类型,如计划内、计划外。每笔交易都可能有一笔——每种类型的成本只有一笔。这很容易映射为多对一的交易,并在成本上重新组合。但是我想要的是创建一个costs对象,它为每个cost都命名了属性。因此,对于如下所示的数据库: Deal: Cost ID Name ID DealID Type Value --------- ----------------------

NHibernate多对一关联拒绝加载

我有以下映射,多对一属性“Message”在“RootMessage”类中有一个对应的一对多关联 <class name="IMessageReceipt" lazy="false" table="MessageReceipts" abstract="true"> <id name="Id"> <generator class="guid.comb"></generator> </id

是否使用nhibernate级联删除多个级别?

我有一个表3级的层次结构(QualificaionType有许多QualificationGroup,它们有许多限定条件),映射如下: // QualificationType HasMany(x => x.QualificationGroups) .Inverse() .KeyColumns.Add("QualificationGroupId") .AsBag() .Cascade.AllDeleteOrphan() .Access.CamelCa

nhibernate多对多关联-属性返回空集 我在A和B.之间有很多到很多的关系(我知道我可以考虑重构等等,但这是另一回事)。 我的代码执行如下操作: // given aId is the Id of an instance of A, and A has a many to many set of B's A a = myActiveSession.Get<A>(aId); a.Bs.Add(new B() {Name="dave"}); //给定的aId是A实例的Id,A有一组多对多的B A=myActiveSession.Get(aId); a、 添加(新的B(){Name=“dave”});

我得到一个异常,因为a.Bs是空的。 这只发生在测试套件的上下文中,当我运行单个测试时,我得到一个集合,一切都正常。 我希望,由于默认值是lazy-fetch,所以当我访问属性getter时,Bs将被初始化,但是如果失败,我希望得到一个异常,而不是简单的null。。。既然这样,我现在还不知道是什么原因造成的。有什么想法吗 PS:这是映射: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:

NHibernate persist System.Uri

我有一个域对象,它有两个Uri属性,需要持久化到一个URL表中,该表有Uri的几个部分,在检索后需要从中重新组装这些属性。我可以很好地存储这些属性,但是如何告诉NHibernate如何重新创建Uri属性呢?不能直接设置Uri对象的大多数属性。相反,url必须被组装并传递给Uri构造函数。我个人并不认为Uri类型非常有用,但我可以想到两个选项: 通过实现IUserType创建一个新的用户类型(请参阅-SearchfortheURI实现,大约是一半) 创建映射到NHibernate中的受保护字符串属

在NHibernate中,增量是否适用于组唯一的标识密钥?什么是合适的?

我正在连接一个遗留数据库,它是我们的ERP系统。我有一个使用复合键的表,其中一个字段是递增的,但它在记录的子组中是唯一的。我没有能力改变这一点,尽管我希望我能 比如说,, CustomerId_字段,SequenceID_字段 49, 1 49, 2 200, 1 200, 2 200, 3 200,4 此多用户应用程序的典型插入如下所示: 插入MYTABLECustomerId_字段、SequenceID_字段 值?CustomerId_字段,选择MAXSequenceID_字段+1,其中Cu

Nhibernate 使用Castle验证器验证自身的对象

我有一个属性为Employee的任务对象。我正在试图找到一种最好的方法,将验证设置为只允许某些员工访问任务对象。如果当前上下文用户web/winforms尝试实例化任务对象,该对象应自动验证自身并返回验证错误消息。 你能告诉我最好的方法是什么吗 我使用Fluent nHibernate和Castle验证程序,前端是asp.net MVC public class Task:ITask { public virtual int TaskID { get; set; }

nhibernate动态插入因某些空组件属性而失败

我有一个不接受空值的数据库,每个字段都有一个默认值。使用fluent nHibernate,如果我有一个填充了一些但不是所有属性的组件,那么在插入时会出现错误。我只是想知道如何将DynamicSert标志降低到组件级别。也许已经晚了,但我还是把这个放在这里,看看它会去哪里 映射: public ClientMap() { Table("Clients"); DynamicInsert(); DynamicUpdate();

NHibernate:如何使用CriteriaAPI排除属于联接的类

我还不熟悉Hibernate,正试图将它用于我继承的网站。不幸的是,这意味着有时候db模式并不总是有意义的 话虽如此,我正试图使用CriteriaAPI构建以下HQL查询 from TableB b where b.id = :id and b.TableAProperty.UserId = :userId 上面的HQL语句生成SQL,它将只选择并返回TableB,这正是我想要的。但是,使用如下所示的CriteraAPI语句,生成的SQL语句选择TableB和TableA的字段 DataPro

Nhibernate 是否为映射文件中的实体设置默认orderby?

是否可以在NHibernate映射文件中设置默认的按列排序?除非明确定义,否则我希望自动按名称列对所有特定实体进行排序 我已经看到它可以在集合上完成,但这不是我在本例中所追求的。不,这在NHibernate映射上下文中没有意义,因为顺序始终取决于您如何执行查询;定义“默认顺序”毫无意义 相反,在DAO/存储库基类中执行此操作

Nhibernate FieldNameLookup引发IndexOutOfRangeException

我们时不时会遇到这个非常奇怪的错误 NHibernate.ADOException: could not execute query [ SELECT this_.Id as Id37_0_, this_.AREA_ID as AREA2_37_0_, this_.BAT_CHK as BAT3_37_0_, this_.BAT_COD as BAT4_37_0_, this_.BBEACT as BBEACT37_0_, this_.CREDATE as CREDATE37_0_, this_

基于Fluent-NHibernate映射生成数据库完整结构的方法

我正在寻找基于NHibernate映射数据生成应用程序数据库完整结构的方法。其思想是为用户提供一个选项,以提供数据库连接字符串,然后使用应用程序所需的结构构建数据库 数据库需要独立-这意味着它需要与NHibernate支持的任何数据库一起工作 所谓完整结构,我的意思是我还想生成索引字段和表之间的关系 他们用NHibernate实现这一目标的几种方法是什么?那么,它们是什么呢?您可以使用该类来实现此目的。API有点奇怪,但它仍然可以工作。您使用该类就是为了这个目的。API有点奇怪,但它仍然可以工作

Nhibernate 升级到VS2010和Re#5后,SQLite相关nUnit测试出现问题

使用ReSharper5转换到Visual Studio 2010后,我的一些单元测试开始失败。更具体地说,这适用于使用NHibernate和SQLite的所有单元测试。这个问题似乎与SQLite有关。不涉及NHibernate和SQLite的单元测试仍然运行良好 例外情况如下: NHibernate.HibernateException : Could not create the driver from NHibernate.Driver.SQLite20Driver, NHibernate

Nhibernate 对没有定义关系的数据库使用ORM?

考虑一个数据库(MSSQL 2005),它由100多个表组成,这些表在一定程度上定义了主键。表之间存在“关系”,但这些关系不受外键约束的约束 考虑下面我正在处理的典型表类型的简化示例。用户表与城市表和省表之间有明确的关系。但是,它们的关键问题是表中的数据类型和命名约定不一致 User: UserRowId [int] PK Name [varchar(50)] CityId [smallint] ProvinceRowId [bigint] City:

Nhibernate碎片生产准备好了吗?

在我工作的公司,我们有一个单一的数据库模式,但我们的每个客户都使用自己的专用数据库,一个中央数据库存储客户联系方式和客户使用的数据库,以便我们可以连接到适当的数据库。我看过使用NHibernate碎片,但它似乎变得非常安静,看起来不完整 有人知道这个项目的状态吗?有人在生产中使用过吗 如果它还没有达到可以在生产中使用的程度,有什么替代方案?两个主要问题似乎是: 为每个数据库创建一个会话工厂,然后创建一个包装器来选择合适的工厂来生成正确的会话——在我看来,这似乎有多余的会话工厂,效率不高 只创建一

使用NHibernate的领域建模问题/集合 请考虑以下所示的域模型(简化为简洁-无ID等)。“代码>客户< /代码>只能对产品进行评论。让我们假设(出于我不想在此讨论的原因),Customer类不能拥有它所拥有的Reviews的集合。产品是此处的主要聚合根

通常在这种情况下,在检索产品时,它将仅在特定客户的上下文中。换句话说,我只对属于该特定客户的评论集合的成员感兴趣 因此,在检索产品对象时,是否有一种方法将集合的填充限制为与客户我提供的内容相关的审阅?这将如何在NHibernate中实施?这是否完全符合NHibernate的最佳实践(并在较小程度上符合DDD) 公共类产品 { 公共虚拟字符串名称{get;set;} 公共虚拟ISet评论{get;set;} 公共产品() { Reviews=新的HashedSet(); } } 公开课复习 { 公

NHibernate:将用户类型对象映射到单独的表

让我们从这个映射开始: <component name="Location"> ... <property name="Settings" type="JsonUserType,..."> <column name="LocationSettingsType" /> <column name="LocationSettingsData" /> </property> </component> 及

Nhibernate 删除时有多个原因KeyNotFoundException

嗨,我是nhibernate的新手,我读了很多有类似问题的帖子,但我没能让它工作。 我使用oracle、nhibernate3 alpha和fluent nhibernate进行映射。我有亲子关系。子表具有复合id。选择、插入、更新记录都有效。删除没有子记录的父记录有效。但是删除一个有孩子的家长或只删除一个孩子会抛出一个KeyNotFoundException。我好像在地图上遗漏了什么 堆栈跟踪 bei System.Collections.Generic.Dictionary`2.get_It

用于中等信任环境的nhibernate库

关于这个话题有很多讨论[nhibernate for medium trust]。非常想知道是否有一个地方可以使用与medium trust兼容的Nhibernate和依赖库 这将非常有帮助。事实上,有一个地方可以让文件在中等信任环境中运行NHibernate,而无需执行诸如禁用延迟加载之类的疯狂操作。我写了一篇关于它的博客文章,并提供了下面的链接 获取文件非常简单,请看一看 祝你好运 谢谢Kila Morton,在Follow获得了图书馆,它也很有效。(同样感谢约翰…)

在NHibernate映射中为未使用的列提供默认值

我的域对象不使用数据库表中的2个不可为空的列。这两列都是guid。有没有办法在映射文件中为这些列提供默认值,以便将域对象保存回数据库?您有几个选项: 在hbm.xml文件中提供您自己的。不幸的是,这迫使您控制所有插入逻辑 将列映射到对象中未公开的私有字段,并在创建新实例时设置GUID。然后,NHibernate可以在插入时将这些字段保存回去。您还可以将映射标记为update=“false”,以便只插入它们 在数据库架构中为这些列添加默认值 另一个选项是使用eventlistener。我这样做是

Nhibernate 通过比较两列上的相等值来连接两个表

为了简单明了,假设我有这三张表 员工 [ 身份证件 ] 员工姓名 [ 雇员ID, 名称 ] 员工地址 [ 雇员ID, 地址 ] “子表”EmployeeName和EmployeeAddress中仅定义了属性/关系 EmployeeName属于员工 员工地址属于员工 主员工表中没有属性/关系(集合),例如 雇员有许多雇员姓名 这个雇员有许多雇员地址 我想仅在EmployeeName和EmployeeAddress之间使用DetachedCriteria执行联接(不涉及员工) 选择Emplo

NHibernate标准限制与表达

若我在互联网上搜索NHibernate标准API查询示例,有一些示例使用限制,而其他示例使用表达式。这两者有什么区别 例如: posts = session.CreateCriteria<Post>() .Add(Expression.Eq("Id", 1)) .List<Post>(); posts = session.CreateCriteria<Post>() .Add(Restrictions.Eq("Id", 1))

Nhibernate 温莎城堡在哪里?

我正在尝试使用nHibernate、Castle Windsor、WCF和ASP.NET为基于分布式域驱动设计的系统绘制技术架构图 我使用了典型的层,即基础设施层、接口层、应用程序层和域层 我的理解是否正确,将nHibernate、Castle Windsor、WCF作为DDD基础设施层的一部分 请告知。我认为您的声明是正确的,即nHibernate、Castle Windsor、WCF应位于基础设施层 实际上,它们的用法不同。 WCF通常放置在单独的程序集/项目中,因此可以被视为底层,因为我们

NHibernate:为每个父项选择子集合中按日期排序的前1名

我有一个客户机类和一个会议类,我试图检索每个客户机的所有后续会议。这样我就可以为每个客户开一次会议 我最终得到了这样一个问题: var qry = from client in session.Query<Client>() select new { c = client, e = client.Meetings.OrderBy(x => x.Date).First()

FluentNhibernate自动映射树(递归关联)

我正在尝试自动映射一个类代码。代码可以有(子)代码 这是可行的,但我的表中有IdParent列和IdCode列。 命名父属性IdCode没有帮助,然后我会得到IdIdCode列和IdCode 我需要做些什么来解决这个问题 我使用配置对象的自动映射似乎您的自动映射使用了一种约定,将前缀Id添加到引用和Id中 如果需要,您可以在AutoMap配置中使用自己的自定义ForeignKeyConvention来覆盖此约定 否则,只需相应地命名db表列。父表列的名称不是问题。关键是它被添加了两次:一次用于外

NHibernate“;无效强制转换(检查映射中的属性类型不匹配);“系统对象的设置器”;

我一直在升级我的NHibernate安装(仍在1.2版本!)。在我尝试设置拦截器之前,一切都很好。如果我向OpenSession()调用添加了拦截器,那么在尝试从DB加载实体时会出现以下错误: “无效强制转换(请检查映射是否存在属性类型不匹配);System.Object的setter” 如果没有拦截器,则不会发生此错误 拦截器非常简单,事实上,为了测试,我几乎注释掉了所有内容: public class Interceptor : EmptyInterceptor { public o

NHibernate连接池

我正在考虑将Fluent NHibernate用于SQL Server 2008的一个新应用程序,但我很难理解我看到的连接处理行为 我正在使用sp_who2监控连接,下面是我看到的: 创建SessionFactory时,将打开一个连接。这种联系 似乎一直保持打开状态,直到应用程序被终止 打开新会话时不会打开任何连接。(没关系,我知道NHibernate会等到最后一刻才创建数据库连接) 即使通过NHibernate运行查询,也不会打开新连接。我必须假设它使用的是创建SessionFactory时创

NHibernate映射系统。类型

当我映射一个属性类型为System.type的实体时,我知道NHibernate会将其映射到DbType.String,其中包含程序集限定名,并且我可以在表中看到,type列包含类似“TarkusSoftware.Abstract.ITask,TarkusSoftware.Abstract,Version=1.0.0,Culture=neutral,PublicKeyToken=null”的值 这对长期开发意味着什么,当我们最终将汇编版本(例如)更改为2.0.0.0时会发生什么?我认为NHibe

NHibernate查询版本、投影和别名

我有一个nhibernate问题,我正在投影sql合并函数 我正在比较两个不同实体中具有相同名称的两个字符串属性。在生成的sql中,仅比较第一个实体中的相同属性,因此: var list = Projections.ProjectionList(); list.Add( Projections.SqlFunction("Coalesce", NHibernateUtil.String, Projections.Property<TranslatedText>(t

Nhibernate-继承-与子对象的零对一关系,如何映射?(流畅的API)

我有一个继承层次结构,其中Action是ActionCompleted和ActionCancelled的父级。订单类有一个0:1的ActionCompleted和ActionCancelled 我想要保留外键的唯一位置是orderId的action表中。可能吗?这在关系世界中运行良好??可能有7-8个动作类型和顺序与它们都有零对一的关系 我是ORM新手,从EF开始学习,但到目前为止还没有得到任何帮助来解决这个问题,现在我想用NHibernate来探索这个问题。我知道这可能要求太多,但如果有人有一

内存中的SQLite和NHibernate

我在这里有点迷路了 我搜索了一些信息,似乎有几个SQLite GUI工具来创建SQLite DB文件。同时,我还注意到NHibernate附带了SQLite的内存配置 return Fluently.Configure().Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyEntityMap>()).Database(SQLiteConfiguration.Standard.InMemory().ShowSql()).Buil

映射自定义NHibernate类(如视图)

我有几个类/映射。。。一切正常。。。 有时会创建一个视图以获得更好的性能 我想知道是否可以在不创建DB视图的情况下创建特殊映射 例如,我有: class Test { Test2 test2; string a; } class Test2 { Test3 test3; string x; } class Test3 { Test4 test4; string y; } 我想创建一个类/映射(不创建db视图),如下所示: class CustomTest {

Nhibernate System.InvalidOperationException:尝试添加属性';名称';当已经添加时

我真的很难启动我的第一个NHibernate项目,我认为我的问题主要围绕Enum。我当前遇到以下异常: System.InvalidOperationException: Tried to add property 'Name' when already added. 我已经下载了Fluent NHibernate源代码,并在异常发生的地方设置了一个断点,并且能够将其锁定为与EnumStringType有关的内容 我定义了以下类: public class CurrencyStringType

NInject和NHibernate坐在树上

。。但不是k.i.s.s.i.n.g 我正在尝试使用NInject和NHibernate。通过我使用的NuGet NHibernate v3.1.0.4000 NHibernate.CastleV3.1.0.4000 NHibernate.linqv1.0 FluentNHibernate v1.2..0.712 NInject v2.2.1.4 当我试图通过NInject解析类时,会出现以下错误: 无法加载文件或程序集“NHibernate,版本=2.1.2.4000,区域性=中性,Pub

表Y中的关联引用了一个未映射的类:Y-C#NHibernate

我得到了一个例外: "An association from the table order refers to an unmapped class: FrancosPoS.DBMapping.pastaCombo" 对于此NHibernate映射: <?xml version="1.0" encoding="utf-8"?> <hibernate-mapping assembly="FrancosPoS" namespace="FrancosPoS.DBMapping" x

NHibernate多对多“;其他";柱

我现在有4张桌子 产品,类别,子类别,产品子类别 类别具有“一个域”的多个子类别关系 产品与类别之间存在一对一关系,与子类别之间存在一对多关系 这些桌子看起来像这样 产品表 Id Name CategoryId ----------------------------- 1 P1 1 2 P2 2 Id Name ----------------- 1 Food 2

不存在QueryOver的NHibernate

我有一个实体GameSystemDAO和一个实体ChampingsItemDao,其属性GameSystem是GameSystemDAO类型的多对一。什么是对应于以下SQL的QueryOver表达式 select * from gamesystemdao g where not exists ( select * from contestplanninggsitemdao cpgsi where cpgsi.gamesystem = g.id) 我尝试了以下(以及许多其他变体):

Nhibernate 代码映射:DELETE语句与引用约束冲突

我将nHibernate 3.3.1.4与代码映射一起使用 具有人物和图片对象,其中人物具有图片成员。 Picture有一个Id(int)和Image(byte[])成员。 上传新图片时,我想先删除旧图片,如下所示: var person = _personRepository.Get(personId); var picture = partner.Picutre; _pictureRepository.Delete(picture); 但是,我的映射似乎不正确,因为我得到一个关于“DELE

Nhibernate 获取使用查询结束的实体的注释总数

我试图获得一个实体的总评论,但我得到的结果不正确 我如何获得任务及其注释计数(急切加载) var tasks=\u session.QueryOver(()=>taskAlias) .Where(x=>x.OrganizationID==null) .Fetch(x=>x.AssignedUser).Eager .Fetch(x=>x.Owner) .Fetch(x=>x.Comments) .List(); 这将返回: 任务ID 1注释3 任务ID 1注释3 任务ID 1注释3 Task.I

使用NHibernate的每个组标识

我正在使用NHibernate 3.3.2(这是第一次),我正在尝试创建下表,以便ID是唯一的表/实体标识符,序列是每个组的唯一标识,在表示例中,俱乐部123、232和444是组 ID Club Sequence 1 123 1 2 123 2 3 232 1 4 232 2 5 444 1 6 123 3 我希望插入只是与俱乐部类别,这两个身份将是自动的 这能做到吗?如果是这样,我该怎么做呢?如果问题是这样的: 根据此模式生成序列列中的值的最佳方法是什么 下面是一些提

NHibernate。混合继承策略

我希望实现此层次结构: BaseOrder --> Order --> ConstOrder 我的映射: BaseOrder.hbm <class name="BaseOrder, BackOffice.Core" abstract="true"> <id name="Id" unsaved-value="0" type="int"> <column name="id" not-null="true"/> <

Oracle中的NHibernate关系

经过无数个小时的努力使实体框架与Oracle协同工作,我已经放弃了,开始走上了NHibernate的道路 我有点纠结于行话,有个问题。给定以下类,如何使用writeofApprovalUser.UserName作为Employee.MailID字段的键,使NHibernate(流畅映射)输出类似于下面SQL的内容 C#类 public class WriteOffApprovalUser : EntityBase<WriteOffApprovalUser> { public

NHibernate RowCountInt64使用转换的查询返回错误的计数

我在执行NHibernate查询时遇到一个奇怪的错误。 我有一个类型为IQueryOver的查询,它被过滤和转换(使用distinctroventy,我猜这是导致问题的原因)。我创建如下查询: List<Guid> companyList = /* some guids */ Company company = null; var query = _session.QueryOver<ExternalUser>() .JoinAli

NHibernate id生成-重复

我对DB中的重复行有问题,希望以一种温和的方式处理它。我有一个NHibernate查询,它将一些数据插入到数据库中(插入到两个具有关系的表中)。如果表中已经有包含特定数据的行,我不想复制它。目前,创建了一个具有不同ID的副本。我听说有一种方法可以使用NHibernate生成标识符,然后将其与不重复的行进行比较。如果您想引用已知ID的现有数据,而不想加载记录来保存它,那么有: var foo = new Foo { Prop1 = 1, Prop2 = "Bar" }; foo.RefPrope

  1    2   3   4   5   6  ... 下一页 最后一页 共 133 页