asp.net-mvc – 如何使用存储库模式处理表关系?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 如何使用存储库模式处理表关系?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在将存储库模式实现为ASP.NET MVC站点的一部分.我看到的仓库的大多数例子都比较简单.例如,这里是一个典型的抽象存储库接口.
public interface IRepository<TEntity>
{
    IQueryable<TEntity> All();
    TEntity FindBy(int id);
    TEntity FindBy(Expression<Func<TEntity,bool>> expression);
    IQueryable<TEntity> FilterBy(Expression<Func<TEntity,bool>> expression);
    bool Add(TEntity entity);
    bool Update(TEntity entity);
    bool Delete(TEntity entity):
}

很明显,如何使用这样的存储库来添加,更新,删除获取单个类型的实体.但是,如何处理创建和操作不同类型之间的一对多或多对多关系?

假设您有一个项目类型,每个项目分配给一个类别.您将如何通过存储库进行此作业?是否应该更新(类别c)和/或更新(项目i)方法来确定需要更新或更新元素的关系?还是应该有一个明确的AssignCategoryToItem(Item i,Category c)方法

如果有任何区别,我使用Fluent NHibernate来实现我的具体存储库.

解决方法

你的应用程序如何处理一个类别到一个项目?

可以:

>允许用户查看该项目,然后为其分配一个类别
>允许用户查看类别,然后添加项目

让你的应用程序指定你选择哪种方法.

这提出了拥有业务逻辑/服务层和处理aggregate roots的想法.在我的应用程序中,我总是有一个所有业务逻辑的服务层.我发现这样做使我的应用程序更容易理解和维护/重构. (注意:我还使用通用存储库,并将复杂的存储库查找放在适当的服务类中的单独的函数中)

在您的服务层中,您将有一个名为AssignCategoryToItem的函数,然后将其分类(聚合根),然后将该项添加到该类别并保存更改 – 尽管我希望传递类别的ID并在更新之前将其从数据库中拉出.

猜你在找的asp.Net相关文章