【发布时间】:2015-12-22 12:52:56
【问题描述】:
我正在使用NHibernate 与MYSQL 进行代码映射,并且映射如下:-
Id(x => x.Id, map => { map.Column("ID"); map.Generator(Generators.Native); });
和数据库如下:-
ID int not null AUTO_INCREMENT
我使用了Generators.Native,因为数据库将通过AUTO_INCREMENT 生成它的ID。但在某些情况下,我想手动设置 id (Id=10)。我如何更改映射,如果 Id=0 则使用“AUTO_INCREMENT”,否则使用已设置的 Id,即 10。
我在互联网上查了一下,得到了这个 link(自定义 ID 生成器),但它是用于 Java + Hibernate。我不知道如何将这个 inNHibernate mapping by code 转换为 C#。
【问题讨论】:
-
为什么要手动设置
id“在某些情况下”的值?这些是什么情况?您正在破坏身份列的目的,并且很可能会引入问题,如果不是立即出现,可能会在数月或数年内使自己为人所知。如果通过删除记录创建的 ID 中存在“空白”,您的程序不应该受到影响,我猜这是您正在尝试解决的问题。 -
如果数据是由前端创建的,那么我们将使用自动增量,并且在运行时我们的系统正在从一些服务中获取数据,这些服务具有一些需要与我们的数据库匹配的 id。可以肯定的是,我们的数据库不会有这个 id,所以我们可以安全地设置 id 及其所需的值。
-
你如履薄冰。假设这个生成的 ID 已经存在?创建一个单独的列来存储这个值。
-
在插入之前我检查这个ID是否存在,如果存在则更新否则插入。
标签: c# mysql hibernate nhibernate fluent-nhibernate