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