nhibernate - 显示顺序 - 模式/解决方案?

时间:2009-11-09 12:58:11

标签: c# nhibernate design-patterns

我在Report对象中有一个ReportColumns集合。

ReportColumns有一个DisplayOrder字段,用于设置报告列显示的位置。这些列可以在设计者ui中重新订购,我可以编写一些hacky代码来改变它们的顺序 - 但是想知道是否在nhib中有关于根据列重新排序实体的问题?或者可能是一个标准模式?这似乎是一个相当标准的事情。

瓦特://

2 个答案:

答案 0 :(得分:0)

我不知道我是否正确理解了这个问题但是:您可以要求NH按照列指定的顺序检索列(即使它没有映射):

HasMany(x => x.Columns)
                .Inverse()
                .Cascade.All()
                .Not.LazyLoad()
                .OrderBy("DisplayOrder")

此处,Columns属性中的ReportColumn对象将按OrderBy指定的顺序。

在HBM中,它将是您的集合的order-by属性:

http://nhibernate.info/doc/nh/en/index.html#collections-mapping

答案 1 :(得分:0)

最终使用了一个触发器:

IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'colmodels_insupd' AND type = 'TR')
   DROP TRIGGER employee_insupd
GO
CREATE TRIGGER colmodels_insupd
ON ColModels
FOR INSERT, UPDATE
AS

update cm
set displayorder = a.rownumber
from
colmodels cm
inner join
(
select colmodels.id, row_number() OVER(partition by colmodels.reportid ORDER BY colmodels.displayorder, colmodels.id desc) as rownumber
from colmodels inner join inserted 
on colmodels.reportid = inserted.reportid and  colmodels.deleted = 0 and colmodels.hidden = 0 
) a
on cm.id = a.id