我正在使用 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);
}
这看起来是个好方法吗?我不想重新发明一个劣质的轮子。