发电机类别NHibernate

发电机类别NHibernate,nhibernate,hilo,Nhibernate,Hilo,我一直在使用生成器类assigned来分配主键值。我读过好几篇博客,都说hilo更好。assigned是否比hilo有好处?assigned仅在您想自己定义主键时有用 如果您从某个地方获得值,例如从另一个数据库或导入的文件中,assigned可能会很有用。但它肯定是一个guid,而不是一个整数。您还可以使用自然主键,它们同时是业务数据和主键。尽管不鼓励这样做 我想说,分配的是用于特殊情况,而不是用于常规应用。通常使用人工关键点,因此不关心确切的值。至少在考虑使用同一数据库的几个进程时,您自己生成

我一直在使用生成器类
assigned
来分配主键值。我读过好几篇博客,都说hilo更好。
assigned
是否比
hilo
有好处?

assigned
仅在您想自己定义主键时有用

如果您从某个地方获得值,例如从另一个数据库或导入的文件中,
assigned
可能会很有用。但它肯定是一个guid,而不是一个整数。您还可以使用自然主键,它们同时是业务数据和主键。尽管不鼓励这样做

我想说,
分配的
是用于特殊情况,而不是用于常规应用。通常使用人工关键点,因此不关心确切的值。至少在考虑使用同一数据库的几个进程时,您自己生成值可能很困难。
分配的<代码>与(大多数?)其他id生成器之间存在重大差异<代码>分配的键不是由NHibernate或数据库提供的。NHibernate通常通过计算id来知道实体是否已经在数据库中。当您自己分配它时,您还需要知道实体是否需要插入或更新。这使得这个id生成器很特别。当您使用
assigned
时,您的代码将与使用任何其他id生成器时看起来不同。

assigned
仅在您想要自己定义主键时有用

如果您从某个地方获得值,例如从另一个数据库或导入的文件中,
assigned
可能会很有用。但它肯定是一个guid,而不是一个整数。您还可以使用自然主键,它们同时是业务数据和主键。尽管不鼓励这样做

我想说,
分配的
是用于特殊情况,而不是用于常规应用。通常使用人工关键点,因此不关心确切的值。至少在考虑使用同一数据库的几个进程时,您自己生成值可能很困难。
分配的<代码>与(大多数?)其他id生成器之间存在重大差异<代码>分配的键不是由NHibernate或数据库提供的。NHibernate通常通过计算id来知道实体是否已经在数据库中。当您自己分配它时,您还需要知道实体是否需要插入或更新。这使得这个id生成器很特别。使用
assigned
时,您的代码与使用任何其他id生成器时看起来都不一样。

因此,基本上我可以修改我的hbm.xml文件以使用生成器
hilo
,并删除在我的实体中设置主键的实例?是的,当您使用
hilo
(或
assigned
以外的任何其他生成器)时,您不需要自己生成主键。主键在实体放入会话时设置(例如,调用Update、Merge、SaveOrUpdate时)。Hilo(大多数时候)不需要数据库往返来生成id(如果您自己设置Hilo生成的id,您将体验到奇怪的行为…),因此基本上我可以修改hbm.xml文件以使用生成器
Hilo
,并删除实体中设置主键的实例?是的,当您使用
Hilo
(或除分配的
以外的任何其他生成器
),您不需要自己生成主键。主键在实体放入会话时设置(例如,在调用Update、Merge、SaveOrUpdate时)。Hilo(大多数情况下)不需要数据库往返来生成id。(如果您自己设置hilo生成的id,您将体验到奇怪的行为…)更好的方法取决于您如何使用assigned。您分配什么?更好的方法取决于您如何使用assigned。您分配什么?