订单在HasAndBelongsToMany关系中

时间:2010-12-13 22:42:06

标签: c# nhibernate castle-activerecord has-and-belongs-to-many

我可以从ActiveRecord的专家那里获得帮助吗?

我正在寻找HasAndBelongsToMany关系的解决方案。我目前有以下

    [HasAndBelongsToMany(Table = "SupplierRecordUrls",ColumnKey = "SupplierID", ColumnRef = "RecordUrlID", Lazy = true, OrderBy="??")]
    public virtual IList<RecordUrl> RecordUrls
    {
        get;
        set;
    }

如何通过“RecordUrl”中的列来订购上述关系,例如......“Name Asc”。我已尝试直接在RecordUrl类中引用一列,但我收到“找不到列”xxxxxx“错误。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以找到OrderBy in a HABTM relation here

将Sort添加到您的关系定义中,创建一个实现IComparer的Comparer,并且可以解决这个问题。

在你的代码中,这将给出这样的东西:

[HasAndBelongsToMany(Table = "SupplierRecordUrls",ColumnKey = "SupplierID", ColumnRef = "RecordUrlID", Lazy = true, Sort="MyProject.RecordUrlNameComparer, MyProject.RecordUrl")]
public virtual IList<RecordUrl> RecordUrls
{
    get;
    set;
}

使用:

public class RecordUrlNameComparer: IComparer<RecordUrl>
{
    Int32 System.Collections.Generic.IComparer<RecordUrl>.Compare( RecordUrl x, RecordUrl y )
    {
        return new System.Collections.Comparer( System.Globalization.CultureInfo.CurrentCulture ).Compare( x.Name, y.Name );
    } 
} // public class RecordUrlNameComparer: IComparer<RecordUrl> 

我让你读到这篇文章:)

修改:

您的错误现在是:Could not instantiate comparator class [MyProject.RecordUrl.RecordUrlComparer, MyProject.RecordUrl] for collection MyProject.Supplier.RecordUrls

我会做什么:

  • 将Comparer创建为RecordUrls的内部类。

  • 将排序更改为:Sort = "MyProject.Supplier.RecordUrl$RecordUrlComparer, MyProject.Supplier.RecordUrl"

如果它仍然不起作用,您仍然会收到“无法实例化”错误,请尝试使Comparer类保持静态。我不确定它是如何使用的,但是如果它是一个静态调用,那可能就是这个伎俩:)