问题标签 [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 投票
1 回答
1453 浏览

c# - NHibernate 3.3:使用复合外键映射多对多关系

我试图弄清楚如何使用 NHibernate 的“性感”代码系统映射来映射以下情况。请帮忙,因为我一直在尝试解决这个问题,但没有运气!我正在使用组件来表示复合键。下面是我要映射的表格。

这是我目前的尝试(根本不起作用!)

帐户:

卡片:

请告诉我这是可能的!

0 投票
1 回答
11243 浏览

c# - 在 NHIbernate 中使用带有公式的属性映射

我正在尝试将属性映射到另一个表的任意列。文档说公式可以是任意 SQL,我看到的示例显示类似。

但是,NHibernate 生成的 SQL 甚至无效。公式中的整个 SQL 语句被注入到SELECT语句的中间。

0 投票
1 回答
150 浏览

c# - NHibernate 中的单列连接使用代码映射

考虑以下 Item 和 ItemContent 之间的关系。

项目
ItemId项目
名称

ItemContent
ContentId
ItemId
内容
ContentType

我想做的是Content在 Item 上有一个属性,它根据映射本身中提供的 ContentType 或以其他方式注入的 ContentType 加入 ItemContent 的 Content 列。

实现这一目标的最佳方法是什么?完成此任务的最简单方法是什么?

0 投票
3 回答
1814 浏览

c# - NHibernate 3.3:在 Id 中将类型设置为 Ansistring 以便通过代码进行映射

我正在映射以下实体:

正如您在注释掉的代码中看到的那样,当使用组件作为 Id 时,我可以使用 NHibernateUtil 将类型设置为 AnsiString。但是我无法弄清楚在普通的 Id 映射中要做什么。

我试过使用new NHibernate.Type.AnsiStringType(),但这抱怨没有为它定义构造函数。

有什么想法吗?

0 投票
1 回答
742 浏览

nhibernate - 如何将多于一层的子类映射到休眠实体(使用 bycode)?

我正在尝试设置一些映射并收到此异常:

无法扩展未映射的类:CommonEntity

[MappingException:无法扩展未映射的类:CommonEntity]
NHibernate.Cfg.XmlHbmBinding.ClassBinder.GetSuperclass(String extendsName)+217
NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddEntitiesMappings(HbmMapping mappingSchema,IDictionary`2 inheritMetas)+352
NHibernate.Cfg.XmlHbmBinding .MappingRootBinder.Bind(HbmMapping mappingSchema) +85
NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName) +156

我有3节课。实体、通用实体和用户。没有实体或公共实体表,只有一个用户表。User 继承自 CommonEntity,CommonEntity 继承自 Entity。Entity 和 CommonEntity 是抽象的。

我已经定义了这个映射:

这是这样使用的:

User 和 CommonEntity 都在“types”数组中。我也尝试为 CommonEntity 添加映射,但没有任何区别。

还尝试调用子类而不是类。如果我直接从实体继承用户,一切正常。有什么帮助吗?

0 投票
1 回答
670 浏览

nhibernate - nHibernate ByCode Mapping - 如何完全按照约定映射ManyToMany?

我已经定义了这个映射:

我遇到了多对多关系的问题。我有用户、用户权限和权限。当我在附加权限后保存用户时,它会生成以下 SQL:

当它应该是这样的:

当我为用户添加特定的类映射时:

我可以省略键和表定义,并在没有列调用的情况下包含 ManyToMany,它可以工作。但它与我的 BeforeManyToMany 事件处理程序做同样的事情。如果我放弃整个 Class 事件,则不会触发 BeforeMapManyToMany 事件,并且 nHibernate 认为我的 Permission 表上有一个 UserId。

继承人用户:

0 投票
1 回答
280 浏览

nhibernate - ConventionModelMapper 如何确定集合/包关系

我在一个新应用程序中使用代码映射,并看到约定模型映射器的一些奇怪行为。它选择了我的 1..N 关系中的一个作为 Bag 和一个作为 Set 的所有关系。据我所见,它们的声明方式基本相同。此外,如果我不为 BeforeMapSet 设置事件处理程序,则永远不会触发适当的 BeforeMapManyToOne 处理程序。

0 投票
1 回答
841 浏览

c# - NHibernate Schema Export 更改了错误的表(NH 中可能存在错误?)

我使用 NHibernates 模式导出功能来创建和更新数据库。

然而有时(似乎更频繁地发生在慢速机器上)NHibernate 会生成不正确的更改表脚本。我禁用了模式导出并记录语句以调试问题。

此问题随机发生并影响随机不同的表。

一个示例脚本是:alter table dbo.VlogNet_NumberGroups add DKS_P03_Artikelgruppe BIGINT

然而,“DKS_P03_Artikelgruppe”列属于一个完全不同的映射,更糟糕的是,这个映射甚至被配置为NHibernate.Mapping.ByCode.SchemaAction.None.

编辑:澄清我的问题: 为什么 NHibernate 会随机混合不同的映射并发出破坏我的数据库的更改表命令。

映射:

HierachicalEntityMap<T>派生自ClassMapping<T>,它只是添加了一些属性(ID、名称、父级)并将 TableName 设置为相应属性的值。

该字段DKS_P03_Artikelgruppe源自此映射:

设置 NHibernate SessionFactory 的代码:

0 投票
1 回答
758 浏览

oracle - 为什么 NHibernate 代码映射忽略我的 Oracle 大小写表名:

我正在使用带有 NHibernate 3.3.2.4000 的 Oracle 数据库。

我设置了一个单元测试来验证是否可以从表中选择实体集合。这是它的样子:

获取我的 OAuthMemberships 集合的行抛出了这个异常:

无法执行查询

[从 bckgrd_booklet_app.OAuthMembership oauthmembe0_ 中选择 oauthmembe0_.id 作为 id13_]

[SQL: select oauthmembe0_.id as id13_ from bckgrd_booklet_app.OAuthMembership oauthmembe0_]

我的 OAuthMembership 类和映射如下。如您所见,我将表名定义为“OAUTH_MEMBERSHIP”,但生成的 SQL 包含驼峰式类名。我没有定义表名约定。为什么 NHibernate 会忽略我的 Oracle 大小写表名?


这是我的 NHibernateSessionFactory:

我的 ActiveSessionManager:

我的 UnitOfWork 定义的相关部分:

0 投票
1 回答
759 浏览

nhibernate - 转换为按代码映射会导致主要的性能问题

我有一个使用映射配置文件的 NHibernate 项目。我正在使用 SQL Server 数据库。

我想通过代码切换到映射。我的方法是一次做一堂课,确认每次转换都通过了所有测试。

混合这两个映射非常简单:

但是,当我将Schedule映射更改为按代码映射时,我遇到了主要的性能问题。调用Session.Flush将需要 12 秒,这超出了微不足道的测试数据量。

我切换回 XML 映射,性能问题就消失了。

有没有其他人遇到过这个问题?

我将包括之前和之后的映射schedule,以防万一有明显的缺陷:

通过配置文件:

并通过代码进行映射:


稍后编辑

我通过不在Flush事务中调用来解决问题。

我试图创建一些更简单的测试代码来复制问题,但没有成功(我所有的测试代码都运行得非常快,无论我调用 Flush 多少次)。这可能是因为我将某些实体的密钥生成从 转换IdentityHiLo.

所以在我看来,我的代码正在创建一个导致问题的特定配置,希望这不会再次困扰我。

如果我猜到了,我会说导致问题的配置涉及对长时间运行的事务的轻率使用与身份密钥生成的结合。