1

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

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

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

这是一个遗留系统,所以数据库结构没有变化(太可怕了)。

我可以用 nhibernate 做些什么来解决这个问题吗?nhibernate 甚至允许修改其密钥。

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

4

2 回答 2

1

您无法使用 NHibernate 更改 PK。正如您已经发现的那样,您正在处理的结构非常可怕。

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

于 2010-06-19T11:49:25.697 回答
0

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

我有一个应用程序,它的对象结构不能真正在数据库上表示,NHibernate 理解语义:它需要一个 3 列的复合 ID,但问题是有些情况下有 2 个列被修改。因此,我将单个列属性映射为 PK 并自动使用其他两个属性,并获得了两个世界中最好的。

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

于 2010-06-19T20:03:47.980 回答