Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc NHibernate-根据属性/列对实体进行排序+;如何管理?_Asp.net Mvc_Nhibernate_Sorting_Repository Pattern_Nhibernate Collections - Fatal编程技术网

Asp.net mvc NHibernate-根据属性/列对实体进行排序+;如何管理?

Asp.net mvc NHibernate-根据属性/列对实体进行排序+;如何管理?,asp.net-mvc,nhibernate,sorting,repository-pattern,nhibernate-collections,Asp.net Mvc,Nhibernate,Sorting,Repository Pattern,Nhibernate Collections,我正在使用NHibernate编写一个ASP.NET MVC电子商务应用程序,我希望最终用户能够控制产品类别的排序(而不仅仅是让它们以alphebetical等方式出现) 通常,我会将OrderIndex/Sort列(类型为int)添加到Category表中,并将属性添加到Category域类中。但问题在于,在对类别进行排序、添加和删除时,必须不断管理这个特殊的OrderIndex/Sort列。我宁愿将其隐藏起来并使其透明,这样调用方就不必直接设置属性 当然,我可以编写自己的代码来管理所有这些,

我正在使用NHibernate编写一个ASP.NET MVC电子商务应用程序,我希望最终用户能够控制产品类别的排序(而不仅仅是让它们以alphebetical等方式出现)

通常,我会将OrderIndex/Sort列(类型为
int
)添加到Category表中,并将属性添加到Category域类中。但问题在于,在对类别进行排序、添加和删除时,必须不断管理这个特殊的OrderIndex/Sort列。我宁愿将其隐藏起来并使其透明,这样调用方就不必直接设置属性

当然,我可以编写自己的代码来管理所有这些,但我想知道NHibernate是否内置了任何可以帮助我的东西,或者它是否可以自动连接此属性

如果没有,那么我考虑创建一个OrderedEntity基类(所有域对象都派生自实体库),并创建一个IOrderedRepository库。大概是这样的:

public class Entity
{
    public virtual int Id { get; set; }
}

public class OrderedEntity : Entity
{
    public virtual int OrderIndex { get; set; }
}

public class Category : OrderedEntity
{

}

public interface IRepository<T> where T : Entity
{
    T FromId(int id);
    void Save(T entity);
}

public interface IOrderedRepository<T> : IRepository<T> where T : OrderedEntity
{
    void MoveUp(int places);
    void MoveDown(int places);
}
公共类实体
{
公共虚拟整数Id{get;set;}
}
公共类OrderedEntity:实体
{
公共虚拟int-OrderIndex{get;set;}
}
公共类类别:OrderedEntity
{
}
公共接口i假设,其中T:实体
{
T FromId(int-id);
无效保存(T实体);
}
公共接口IOrderedRepository:IRepository,其中T:OrderedEntity
{
无效上移(整数位置);
无效下移(整数位置);
}

这似乎是一个好方法吗?我不想重新发明一个劣质的轮子。

到目前为止,我知道Hibernate有一个注释
@OrderBy
,您可以在加载集合时指定顺序。但是当您在集合中添加或删除元素时,Hibernate不会为您管理位置

但是,您可以自己轻松地完成这项工作,并在父实体上提供方法
addItem
removieItem
,这些方法将跟踪位置(或您建议的方法
MoveUp
MoveDown