是否有可能在NHibernate中编辑的复合ID?

时间:2010-06-19 00:54:43

标签: .net nhibernate composite-key composite-id

我的情况是,我的表中有许多列用作复合主键,

更糟糕的是,业务逻辑要求这些是可变的。

我正在使用nhibernate并且没有问题映射loadig /保存这些。但是,我需要能够更新属性值,并在调用更新时将这些更改反映在数据库中。

这是一个遗留系统,因此不会改变数据库结构(可怕)。

我有什么办法可以用nhibernate来解决这个问题吗? nhibernate甚至允许修改它的键。

我正在使用:.net4.0,nhibernate 2.1,fluentnh 1.0和sql server作为后端。

2 个答案:

答案 0 :(得分:1)

你不能用NHibernate改变PK。正如你已经想到的那样,你正在处理的结构太可怕了。

您可以使用SQL查询来更改PK。请记住,在重新使用之前,您必须使用新ID重新加载实体。

答案 1 :(得分:0)

实际上,您没有义务将数据库模式按原样映射到域对象。

我有一个具有一个对象结构的应用程序,该对象结构无法真正在数据库中表示,NHibernate理解语义:它需要一个3列的复合id,但问题是有两个列得到的情况改性。所以我将单个列属性映射为PK并自动使用其他两个属性并获得两个世界中最好的。

请注意,在这些情况下,二级缓存是一个很大的禁忌!