3

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

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

如果这不可能,解决此问题的最佳方法是什么?

谢谢!

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

4

2 回答 2

2

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

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

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

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

于 2008-11-04T08:17:05.960 回答
0

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

选择 NEWGUID() 作为 ID,* 从表中

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

于 2009-04-15T05:07:29.837 回答