0

我正在使用 NHibernate 编写一个 ASP.NET MVC 电子商务应用程序,我希望最终用户能够控制产品类别的排序(不仅仅是让它们按字母顺序显示等)。

通常,我会将 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);
}

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

4

1 回答 1

1

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

但是,您可以自己轻松地做到这一点,并在父实体addItem上提供方法和方法,这将跟踪位置(或方法和您的建议)。removeItemMoveUpMoveDown

于 2010-01-26T11:10:36.810 回答