2

我正在使用远程排序和分页在网格(ExtJS)中为用户呈现数据。假设我有一个包含一些订单的网格。订单实体看起来像 Order{OrderNumber, Customer, Date, Address{Street, City, PostCode}}。Customer 被 NH 映射为关系,Address 被映射为组件。网格中显示的数据被展平为如下命名的列:OrderNumber、Customer.Number、Customer.Name、Date、Address.Street、Address.City、Address.PostCode。

用户选择他想要排序的列,网格将字段名称发送到服务器。现在在服务器端,我需要向后恢复实体属性属于网格字段名称,并确定它是组件还是关系,并使用 CreateAlias + AddOrder 等构建标准。这个逻辑充满了如下代码:

if (gridField=="Customer.Name"){
  cri = cri.createAlias("Customer", "customerAlias");
  cri.AddOrder(Order.Asc("customerAlias.Name"));
}

这已经简化了很多,但目前看起来一定是这样的。我正在寻找一些通用的更智能的解决方案。有什么想法吗?我现在面临的问题是我可以有一个转换实体属性(包括嵌套组件和关系)的约定,但是我需要一个方法来确定该字段是否像组件或关系一样映射。这将是相当沉重的......

4

2 回答 2

1

会很重。我没有看到一个简单的解决方案,但是如果您打算大量重复使用它,或者需要一些非常强大的东西,您可以构建一个基于反射的系统。

另一种可能性是使用一些 T4 模板,但这只会帮助解决“字符串”问题,而不是关联问题。

于 2009-07-26T21:33:38.113 回答
0

怎么样:

cri = cri.CreateAlias( "Customer", "CustomerAlias" );
string sortProperty = gridField.Replace("Customer.", "CustomerAlias.");
cri.AddOrder( Order.Asc(sortProperty) );
于 2009-07-01T23:12:12.707 回答