如果实体没有,可以让NHibernate自动生成ID,或者如果已经有实体的ID,可以使用实体的ID吗?

时间:2010-10-14 04:42:45

标签: c# nhibernate fluent-nhibernate identity uniqueidentifier

根据REST哲学,PUT操作应该(取自维基百科):

PUT http://example.com/resources/142

  

更新该集合的地址成员,如果该成员不存在,则创建

NHibernate似乎有两种处理实体ID的方法:

  1. 自动生成ID,无论用户设置了什么值。
  2. 使用用户指定的ID,但丢失所有自动生成功能。
  3. PUT操作的问题是创建实体的部分,如果它不存在的话。我的假设是,如果您PUT资源不存在,它将使用URL指定的相同 ID创建它(如果我们使用上面的示例,则为142) 。但是,如果自动生成,NHibernate不允许您设置ID。

    所以我的问题是,有没有办法让NHibernate自动生成一个ID,如果实体没有一个(或者具有ID类型的默认值,例如0表示整数),还可以保存具有用户设置ID的实体?

1 个答案:

答案 0 :(得分:1)

通常使用指定的ID是个坏主意。

你所拥有的情况更接近于NaturalId。我认为你应该使用它。您需要具有两个不同的属性,一个用于数据库主键,另一个用作用户可见的ID。