问题标签 [mapping-by-code]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3545 浏览

c# - 使用 NHibernate 的简单获取(使用按代码映射)非常慢

所以我对为什么这么慢已经没有想法了。也许你可以帮忙。因此,我正在尝试使用 nHibernate 通过代码映射从 oracle db 中进行简单的记录。我正在使用来自 nuget 的 nHibernate 版本 3.3.1.4。

这是映射代码:

这是创建会话工厂和检索数据的代码。

生成的查询如下:

平均大约需要 80-100 秒才能访问检索到的对象。这也包括创建会话。

所以我寻找了一些明显的东西:

  • personId 列被索引(它是表的主键)。
  • 数据库在服务器上,所以要检查它不是网络占用时间,我使用 AD0.Net (Oracleconnection + Oraclecommand) 运行上述生成的查询。这大约需要 180 毫秒,包括创建连接并将记录映射到实体类。
  • 通过 PL/SQL 开发人员运行查询(大约需要 32 毫秒)。
  • 检查生成查询的查询计划(确认使用索引唯一扫描而不是全表扫描)。
  • 我已经在我的本地上针对类似大小的 sql 2012 db 运行了上述代码,并且通过 NHibernate 代码大约 180 毫秒。
  • 运行 nhprof(评估)并得到以下结果:

NHibernate 分析器的结果

似乎查询已运行并且结果从数据库返回的速度非常快(根据 nhprof 结果),但可能是将查询的值水合到占用时间的实体中。我不知道可能会浪费时间!

我的下一步是将 nHibernate 源附加到解决方案并逐步完成它,但是工作中的下载访问是有限的(甚至是 github!)。到那时有什么想法吗?

干杯。

更新:所以我在我的项目中获得了 nHibernate 源代码并逐步完成了它。一切都在顺利进行,直到程序到达这段代码:

执行会rs.Read()消耗时间,其中 rs 是 oracle 数据读取器。这段代码在DoQueryLoader.cs 文件的函数中。

奇怪的是,如果传入的查询是一个非参数化的动态查询(例如select ... from person where personid = '1'),执行速度很快(~ 1 毫秒),但如果它是参数化的(例如select ... from person where personid = :p1),那么它的速度就慢得离谱。由于我想利用 nHibernate 的强大功能,我需要使用生成的参数化查询。我仍在试图弄清楚为什么甲骨文阅读器

0 投票
0 回答
431 浏览

nhibernate - nHibernate 将过滤的包映射到单个属性

我需要将一个实体映射到一个数据库的主表。

该实体与另一个实体具有 OneToMany。

我需要将主实体的集合映射到子表的所有行。

但我还需要使用从子表中获取的单行映射一个属性,并按始终只返回一行的条件进行过滤。

有点像组件,但在过滤的子表中。

这是我的映射:

我发现了一些关于 DynamicComponent 但我不知道它是否适合我......

http://notherdev.blogspot.it/2012/01/mapping-by-code-dynamic-component.html

谢谢你!!

0 投票
2 回答
201 浏览

nhibernate - nhibernate中的生效日期

我在两个现有表(User: UserId, Name)(Location: LocationId, Name)之间有多对多关系,这些无法更改。我使用了多对多映射,但我们有一个新要求,包括历史/未来运动。

我使用了 peoplesoft 的概念,即在替换旧表的新相交表(UserLocation:UserId、LocationId、EffectiveDate、Status)中有效地对记录进行约会,其中前 3 个字段构成主键。

在 SQL 中,我可以简单地使用以下语句返回给定生效日期的活动记录,但我无法从 NHibernate 获得类似的信息(甚至会收到有关参数在多级选择中不起作用的错误)。

我需要通过包含 UserId 和 EffectiveDate 列的参数来返回进一步过滤的记录,但很乐意返回所有内容。

然而,我的问题是映射类(我使用代码映射,而不是流利的),甚至无法让它接近工作(有限的 NHibernate 知识)。我希望不必为相交表创建一个新类。我什至还没有进入插入/更新/删除部分,因为我什至无法让 select 工作。

要求: 1. 在将用户关联到 EffectiveDate = NOW,Status = True 的位置时,在 UserLocation 中插入新记录 3. 将用户移动到新位置应在 UserLocation 中插入新记录,EffectiveDate = NOW,Status = True 4. 删除来自该位置的用户将插入新的 UserLocation 记录,其 EffectiveDate = NOW,Status = False 5. 检索用户在给定日期关联到的位置。

注意:由于会根据这些数据生成报告,因此我们无法删除记录,并且还会为将来的事件创建数据。

如果有人能指出我正确的开始方向,那将不胜感激。我查看了 Loader 和 Interceptor 类,但似乎无法使其适合。

0 投票
1 回答
1682 浏览

nhibernate - NHibernate 3.3.1 通过代码映射与 property-ref 的多对多关系

我有一个相当大的数据库,我必须使用 NHibernate 3.3.1 byCode 映射来映射两个实体(请注意我没有使用 FluentNHibernate,而是内置映射)

实体通过唯一键而不是主键处于多对多关系中。

这是我的例子

所以我必须通过 Uniqueidentifier 属性使用第三个表 AchievableKittings 将 Achievable 表链接到 Kitting

我编写了以下映射类:

它接缝 NHibernate 忽略 k.PropertyRef(x => x.Uniqueidentifier) 语句。我的主键是由身份生成的 bigint。现在,当 Nhiebrnate 尝试创建数据库时,它会为 AchievableKittings 创建 FK 密钥,以实现可实现的 primaryKey,但不是 property-ref Uniqueidentifier

当然它会抛出一个异常:

使用 FluentNhibernate 能够以正确的方式映射它。不幸的是,我不能在当前项目中使用 FluentNhibernate。

所以有人可以帮我解决这个问题。

0 投票
1 回答
1222 浏览

nhibernate - 通过代码进行双向 NHibernate 映射

需要明确的是 - 这个问题与 Fluent NHibernate 无关。

我有一个ParentChild类,它们之间是一对多的关系。

为了便于阅读,代码被缩短了。

该类Child需要一个Parent属性。控制关系的Parent需要(我不能在' 结束时设置Inverseto )。trueParent

Parent和映射应该是Child什么样子的?

0 投票
1 回答
187 浏览

nhibernate - 如何集成 ComponentMapping与顺从映射?

我正在使用顺从映射开始一个新项目。我有一组常见的字段被拉到组件映射中,如下所示:

但是,在我的类映射中,似乎没有任何 Component 方法的重载可以接受其中之一,也没有神奇地被拾取。如何使用此映射?

0 投票
1 回答
268 浏览

nhibernate - Nhibernate ByCode Mapping -- 如何避免空的多对一对象映射?

我正在映射一个遗留数据库,以前用户在注册并稍后添加它时不需要选择一个国家。

所以有些用户的 CountryID 为 NULL。因此,当我的多对一映射(ByCode)尝试加载相应的国家/地区详细信息时,它没有找到,因此用户的“国家/地区”对象为空。

例如,当我尝试显示 user.Country.Name 时,我得到一个对象引用未找到。

我可以通过创建一个 ID 为 -1 的国家(称为未公开)来破解这个问题,然后将所有空国家 ID 更改为 -1,但这是在解决我认为的一个常见问题时作弊。

所以我的问题是如何映射,以便如果找不到 CountryID,该用户将获得一个新的 Country 对象。

我在用户对象中的映射是:

我的 CountryMap 非常基本......

0 投票
1 回答
1555 浏览

nhibernate - NHibernate 复合元素代码映射

我正在尝试通过翻译“NHibernate in Action”中的示例来通过代码学习 NHibernate 映射,但其中一个示例有问题。我已经包含了我正在尝试翻译的 XML 以及我在翻译它时所做的努力。代码基本上在类别和项目之间具有多对多关系。它使用一个名为 CategorizedItem 的组件类来维护两个实体之间的关系。

我遇到的问题是,一旦我在 lambda 中声明了 Category 的 Items 属性,Item Class 的属性就是组件映射中唯一可供选择的属性。我想让映射知道 CategorizedItem 的属性是要在关系中映射的属性,但我不知道这是如何实现的。下面是我要翻译的 XML...

...这是我部分完成的映射。

组件的类属性看起来像可能的目标,但它拒绝 CategorizedItem 作为类型参数。任何帮助将不胜感激。

0 投票
1 回答
847 浏览

nhibernate - NHibernate 代码映射:将旧版非 int ID 键映射到我的实体中的 int 属性,得到“无法确定类型”异常

我有一个遗留数据库,它使用存储为 VARCHAR(8) 的零填充数字作为表中的主键值。(例如,“00032982”)

我想将这些映射到我的实体对象中的 Int32 属性而不是字符串。

我的第一次尝试是创建一个实现 IUserType 的类。但是我正在映射一个 ID,而不是一个属性,并且按代码映射不会编译:(也许我没有做那部分对吗?)

我查看了 IIdentifierType,它有 40 多个成员。我到处看了看,似乎创建一个子类 NHibernate.Type.ImmutableType 的自定义类型将是解决方案。(......也许这是我的第一个错误?)

因此,我创建了一个基于 ImmutableType 的新类,它在 Set() 方法中对其进行零填充:

在我的基础实体类中,我将其定义为 Int32:

然后我尝试映射它:

然后我得到了这个异常......我觉得这可能表明其他东西。这是堆栈跟踪:

提前致谢!

0 投票
2 回答
1186 浏览

c# - NHibernate - 暂时关闭身份

我正在使用 SQL CE 运行 NHIbernate 解决方案。我正在映射一个表中的字段,如下所示。但是,为了运行一些数据导入,我需要能够暂时关闭身份,以便我可以使用现有密钥导入数据,然后在导入完成后重新打开身份。

我试过直接从这样的解决方案运行 SQL 查询:

但这似乎没有效果。

有没有办法暂时打开和关闭它?