有没有办法伪造NHibernate中的ID列?

时间:2008-11-03 17:11:07

标签: nhibernate nhibernate-mapping

假设我正在将一个简单的对象映射到包含重复记录的表,并且我希望在我的代码中允许重复。我不需要在此表上更新/插入/删除,只显示记录。

有没有办法可以在我的映射文件中放置一个假的(生成的)ID列来诱骗NHibernate认为这些行是唯一的?创建复合键不起作用,因为所有列都可能存在重复。

如果无法做到这一点,解决此问题的最佳方法是什么?

谢谢!

编辑:查询似乎是要走的路

2 个答案:

答案 0 :(得分:2)

NHibernate映射假设您要保存更改,因此需要某种ID。

如果允许修改表,则可以添加标识列(SQL Server命名 - 您的数据库可能不同)以自动生成唯一ID - 现有代码应该不受影响。

如果允许添加到数据库但不允许添加到表中,则可以尝试定义包含RowNumber合成(计算)列的视图,并将其用作要加载的数据源。根据您的数据库供应商(以及视图和索引的产品处理),此可能面临一些性能问题。

我没有尝试过的另一种选择是将您的类映射到SQL查询而不是表。 IIRC,NHibernate支持在映射文件中命名SQL查询,您可以将它们用作“数据源”而不是表或视图。

答案 1 :(得分:0)

如果您只读取数据,我们发现的一种简单方法是在视图中包装查询并在视图外构建实体,并添加newguid()列,结果类似于

SELECT NEWGUID()as ID,* FROM TABLE

ID然后成为你的单一主键。如上所述,这仅对只读视图有用。由于ID在查询后没有相关性。