0

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

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

我目前的方法是通过工作单元访问数据库,该工作单元为每个实体(数据库中的表)创建存储库

 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 的模型类(组合)时。两个模型(域和域2)它不是给定上下文的一部分,因为该实体不存在,因此在视图中使用 @model namespace.Models.Combined 毫无意义。

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

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

非常感谢您的帮助。

4

1 回答 1

0

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

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

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

于 2013-10-18T19:40:44.093 回答