我有一个使用自然键的数据库(即面向业务的键)。不幸的是,由于这个原因,这些对象的主键可能会随着时间而改变。
我目前正在研究将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。谢谢。
答案 0 :(得分:1)
我实际上是在踢自己,我甚至问过这个问题,因为我可以通过执行删除插入操作来轻松缓解这个问题。这更像是现有数据库的概念验证。感谢您的投入!
答案 1 :(得分:0)
您是否尝试使用composite-id?
或Assigned Identifiers?
添加自动递增的ID字段完全没有问题吗?