0

我使用NHibernate的书面方式的ASP.NET MVC的电子商务应用程序,我想最终用户能够控制的产品类别排序(不只是让他们alphebetically出现等)。NHibernate的 - 基于属性/列+如何管理排序实体?

通常情况下,我会向Category表中添加OrderIndex/Sort列(类型为int),并将属性添加到Category域类。但问题在于不得不经常管理这个特殊的OrderIndex/Sort列,因为Categories被分类,添加和删除。我宁愿将它隐藏起来并使其透明,以便呼叫者不必直接设置属性。

当然,我可以写我自己的代码来管理这一切,但想知道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); 
} 

这是否看起来像一个好方法?我不想重塑一个劣质车轮。

回答

1

到目前为止,我知道Hibernate有一个注释@OrderBy,您可以在其中指定集合时的排序加载。但是Hibernate不会管理的立场,即当您add或集合中的元素remove

但是,您可以轻松做到这一点自己和对父实体,这将跟踪位置(或方法MoveUpMoveDown你的建议)提供方法addItemremoveItem