【问题标题】:One view for various data from DB using repositories and UoW使用存储库和 UoW 的数据库中各种数据的一种视图
【发布时间】:2013-10-17 10:19:18
【问题描述】:

我来自 PHP,当我试图在一个视图中显示来自多个实体的数据时,我真的很难使用一种模型/一种视图方法。

我已经用 EF 学习 asp.net mvc 4 大约一个月了,但仍然没有找到解决这个问题的好方法。

我目前的方法是通过 Unit-Of-Work 访问数据库,它为每个实体(数据库中的表)创建存储库

 public GenericRepository<Domain> DomainRepository
    {
        get
        {
            if (this.domainRepository == null)
            {
                this.domainRepository = new GenericRepository<Domain>(context);
            }
            return domainRepository;
        }
    }

然后存储库保存来自给定实体的数据(在这种情况下为数据库),

 public GenericRepository(PanelContext context)
    {
        this.context = context;
        this.dbSet = context.Set<TTypeParam>();
    }

并使用方法过滤数据等

使用单个存储库来提供给定视图不是问题,因为它只使用一个模型(实体)。

当我尝试创建包含 ex 的模型类(组合)时。两个模型(Domain 和 Domain2)它不是给定上下文的一部分,因为该实体不存在,因此在视图中使用 @model namespace.Models.Combined 毫无意义。

现在我正在使用元组从多个存储库中提取数据并使用它来填充强类型视图,但我知道必须有更好的方法......

基本上问题是如何创建(抽象)?模型类(实体)?将保存来自多个存储库的数据并用作给定视图的视图模型?

非常感谢您的帮助。

【问题讨论】:

    标签: asp.net-mvc-4 entity-framework-5 repository-pattern


    【解决方案1】:

    首先视图模型不是数据库实体。它只是一个用于发送数据以查看的存储桶。控制器从模型(存储库、服务)中获取所需的所有数据来填充该视图模型。

    因此,如果您的视图模型是组合类型,控制器将询问存储库(它们不是 EF 的包装器,忘记您在 asp.net mvc 站点或 ef 教程上看到的示例,它们是错误的并教您存储库反模式)的数据,它可能是也可能不是视图模型所要求的格式。如果不是,则创建一些扩展方法,您可以在其中将存储库返回的对象映射到视图模型。

    因此,视图模型为视图服务,并由控制器使用来自存储库的数据填充。通过这种方式,视图与模型分离,因为它只知道视图模型。

    【讨论】:

    • 感谢您的回答。它有一点帮助,但我的关键问题是如何创建特定模型,该模型将组合来自多个数据库和其他来源的多个数据,并使用该模型将数据传递给视图。
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2013-02-12
    • 2022-01-26
    相关资源
    最近更新 更多