问题标签 [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 回答
204 浏览

c# - NHibernate MappingByCode Map Cascade 选项

我有以下带有 Dictionary 的课程:

当前由此代码映射:

我正在寻找一种方法来为 KeyMapping 设置不同的级联选项,并为 ValueMapping 设置不同的选项。但我只能在主要的“集合映射”中找到级联

我希望密钥具有 Cascade.None - 因为应用程序的不同部分管理该实体,并且值具有 Cascade.AllDeleteOrphan。

我怎么能用 MbC 做到这一点?

另外-如果我将“CollectionMapping”的级联设置-它反映了什么实体?

我在 nuget 上使用最新的 Nhibernate。

0 投票
1 回答
204 浏览

nhibernate - 自定义列上带有 InnerJoin 的 ManyToOne()

有没有办法用自定义列映射属性与数据库列,这不是 FK,只是一个候选键(它是唯一的表)?

如果没有,我在这里有什么选择?(需要select通过连接表限制来限制结果)

0 投票
2 回答
351 浏览

nhibernate - NHibernate Table Per Subclass 导致无意义的 INSERT 语句 - 我做错了什么?

我有以下实体:

我使用以下 Hibernate Conformist 映射映射这些实体:

EnumCustomType是将IUserTypeC# 枚举映射到整数列的一个。

经过大量研究和咨询 NHibernate 参考文档和此博客(特定页面)(摘要)后,我制定了此设计和映射。我确信这是我想要的实体设计,但当然有可能(可能?)我弄错了映射。

当我启动并配置 NHibernate 时,它​​会加载映射并且不会抱怨。日志输出没有关于映射的警告。但是,当我创建 a 时PersonUser,将值分配给它的所有属性,并将Add其分配给ISession,最奇怪的事情发生了:

重要的是,看看生成的 SQL:

这是没有意义的。它根本不对应于映射。它在一个表的插入语句中从三个不同的表中获取列。它有来自PersonUserAND 的列ClientUser(这应该是不可能的),它使用不存在的参数索引绑定参数,甚至不包括我设置的所有属性!

我已经玩了几个小时了,没有任何进展。我在这里完全不知所措。这没有任何意义。有人见过这个吗?知道发生了什么吗?

编辑我忘了提:我在这里使用鉴别器是因为我希望能够User通过它的 ID 获得一个泛型,它返回正确的PersonUserClientUser取决于它是哪种类型。

0 投票
1 回答
222 浏览

c# - nhibernate - 将一张表映射到多个父母

我有一个类用于记录系统中所有其他类的更改:

我想要其他具有 HistoryLogEntry 对象列表的对象:

请注意,HistoryLogEntry 没有对 Person 或 Dog 的引用——这没关系,因为我想在 Person 和 Dog 中都使用 HistoryLogEntry 类。

我如何映射这种关系,以便 NHibernate 的导出模式将创建所有必要的列?现在我正在尝试:

但是,当使用 NHibernate 3.3 和 ExportSchemat 时,它不会在 HistoryLogEntry 中创建 IdEntity 列,我相信我需要这个列,以便 NHibernate 知道 HistoryLogEntries 放入我的集合中。

任何帮助将不胜感激。

0 投票
1 回答
279 浏览

nhibernate - 我如何映射通过 NHibernate 的代码?

我需要在多个属性上定义一个唯一约束。在 XML 中,这看起来像:

NHibernate (3.3+) 中的对应代码映射是什么?有没有其他方法可以创建多列唯一索引?

0 投票
1 回答
941 浏览

c# - Spring.net + Nhibernate 3.2 代码映射

我有一个ASP.NET MVC 4应用程序。它使用Spring.netNhibernate 3.2。配置由 xml 文件完成。

最近我进入了 Nhibernate 的Mapping by code新功能。我正在尝试在我当前的应用程序中实现它,因此将配置 ClassMapping 并据此更新方案。

我无法做到这一点,对我的 xml 配置进行了一些更改。

这是我的NHibernate配置

示例映射类

它似乎不起作用。未生成表。

我错过了什么吗?我正在考虑覆盖 LocalSessionFactoryObject ,因为它在下面的链接中为 FNH 完成。它对我也有用吗?我不确定它是否会破坏事务管理或其他东西。

请给我一些关于这个问题的见解。

在这种情况下最好的方法是什么?

在 Spring.Net 中使用 Fluent NHibernate

0 投票
1 回答
530 浏览

c# - 通过代码、删除和 SQL 查询进行休眠映射

我正在使用 nhibernate 3 并通过如下代码进行映射:

这是我的简单代码:

我有几个问题:

  1. 为什么 nhibernate 将此代码转换为这样的 SQL 查询(按确切顺序):
    • UPDATE 清除 PubCalcMscPlFactors 并将 PubCalcInvokes 设置为 NULL FK
    • UPDATE 清除了 PubCalcMscPlFactors 并将 FK 设置为 PubCalcInvokes,在 WHERE 条件下它使用来自 PubCalcMscPlFactors 的 PK
    • DELETE 清除 PubCalcMscPlFactors 集合
  2. 是否可以将此行为更改为仅删除?
0 投票
1 回答
250 浏览

nhibernate - NHibernate Conformist 使用一组简单类型而不是一组实体进行多对多映射

我正在使用 NHibernate Conformist 映射。我已经为我的各种集合属性使用ManyToManyOneToManyElement和关系类型创建了一些复杂的映射。Component但我今天遇到了一个让我难过的人。

Permission有列PermissionIdName。然后是UserPermission带有列和的表和带有UserIdPermissionIdGroupPermissionGroupIdPermissionId

如您所见,Permission是一个实体,用户和权限之间以及组和权限之间存在多对多的关系。但是,为了便于使用UserandGroup对象,我不想要UserandGroup拥有一个(使用ConformistSet<Permission>中的关系类型很容易实现)。ManyToMany我想要UserGroup拥有一组权限名称。通常我会用Element关系类型来实现这一点,除了整个多对多使用连接表问题。

如何映射一组也是多对多的简单类型?

0 投票
1 回答
1576 浏览

c# - 如何使用 NHibernate Mapping.ByCode 在非主键字段上加入表?

我有一张员工表:

positionId 映射到位置表:

ReportsToId 字段是该职位经理的职位 ID。

我想选择一个员工、他们的职位和他们的经理的详细信息。

这将如何使用 NHibernate 的 Mapping.ByCode 来完成。

ReportsToId 字段不是关键字段。从我在网上阅读的内容来看,这似乎会影响映射......

0 投票
1 回答
660 浏览

c# - 如何让 NHibernate 删除一对一关系中的孤儿?

我们的模型中有一个对象,称为 X 类。我们的模型中有几个其他类具有 X 类的实例作为属性,称为 A、B、C 等。这本质上是一对一一个映射,因为每个 X 只能属于一个父类。为了在数据库端映射这种关系,我们目前在表 A、B 和 C 中使用 X 表的外键。对于 NHibernate 映射,我们目前在 A、B 和 C 的映射中使用类:

这主要用于保存、检索和更新我们的 X 类——我们在让 NHibernateOneToOne映射正常工作时遇到了很多问题。问题是,当您使用持久类 A 并将其 X 替换为 X 的新实例然后保存该 A 实例时,新的 X 实例将被写入数据库,并且 A 列中的外键被更新,但是旧的 X 并没有被删除,所以我们现在有一个孤立的 X。

我们希望自动删除那些孤立的 X。我们希望 NHibernate 这样做,因为 X 是一个复杂的类,它与其他表有许多关系,我们设置了级联以正确处理这些表 - 我设置了一个 SQL 脚本来正确删除孤立的 Xes,它大约是 50行长。

我们试图避免涉及在类 X 中引用其父项的解决方案,因为它总共可以属于 5 个类,并且诸如 A 类有一个 X,B 类有 2 个 X 的情况命名属性等

到目前为止我尝试过的事情:

添加DeleteOrphansManyToOne映射 - 不起作用

OneToOne映射 - 真的希望密钥在另一个表中,并且似乎不支持级联删除。

还考虑了:

NHibernate 似乎不支持设置某种甚至在发生更新或删除等事情时触发

显然,只有OneToManyManyToMany映射支持DeleteOrphans,因此,我可以让实际属性使用某种列表或集合,并使用 getter 和 setter 使其看起来像模型其余部分的普通属性。听起来很 hacky,它可能需要在 X 中引用其他类。

数据库触发器——我还没有真正检查过是否可以以这种方式使用 SQL Server 触发器,但这听起来是一个非常尴尬的解决方案。

有人对如何使这项工作有任何想法吗?