是否可以使用NHibernate更新/更改主键?

时间:2009-02-13 21:27:26

标签: database nhibernate database-design

我有一个使用自然键的数据库(即面向业务的键)。不幸的是,由于这个原因,这些对象的主键可能会随着时间而改变。

我目前正在研究将NHibernate用于此数据库的O / RM。但是,在我的测试中,我注意到没有明显的方法来更改对象的主键并将其保存到数据库中。

例如,假设我有一个'Business'对象,其中'BusinessCode'是主键:

public class Business
{
    public string BusinessCode { get; set; }

    public string Name { get; set; }

    ...
}

如果我执行Get,更改主键,并尝试使用NHibernate将其保存回数据库,我会收到异常或意外结果(取决于我是否使用 Save() Update() SaveOrUpdateCopy()

Business b = session.Get<Business>("BusinessCode1");

b.BusinessCode = "BusinessCode22";

session.Update( b );

这样的事情可能吗?

据我所知,许多NHibernate人士建议使用不会改变的主键(即身份)。但我有几个使用自然键的DB。谢谢。

2 个答案:

答案 0 :(得分:1)

我实际上是在踢自己,我甚至问过这个问题,因为我可以通过执行删除插入操作来轻松缓解这个问题。这更像是现有数据库的概念验证。感谢您的投入!

答案 1 :(得分:0)

您是否尝试使用composite-id
Assigned Identifiers

添加自动递增的ID字段完全没有问题吗?