Asp.net mvc NHibernate-根据属性/列对实体进行排序+;如何管理?
我正在使用NHibernate编写一个ASP.NET MVC电子商务应用程序,我希望最终用户能够控制产品类别的排序(而不仅仅是让它们以alphebetical等方式出现) 通常,我会将OrderIndex/Sort列(类型为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列。我宁愿将其隐藏起来并使其透明,这样调用方就不必直接设置属性 当然,我可以编写自己的代码来管理所有这些,
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
)