【问题标题】:WCF AND MVC3, system architecture. Passing a View Model with WCF?WCF 和 MVC3,系统架构。使用 WCF 传递视图模型?
【发布时间】:2011-10-10 09:46:01
【问题描述】:

我正在使用实体框架、Linq、WCF 和 MVC3。该系统已被拆分为分层方法,我正在使用 WCF,因为多个系统将使用相同的数据访问和业务逻辑。

数据访问 - 业务逻辑 - API (WCF) - 服务类 - MVC

对于我的 MVC 应用程序中的每个视图,需要编写 LINQ 查询来访问数据库中的不同表并显示如下所示的摘要。

        var users =
           (from u in _userRepository.All
            from upd in u.UserPropertyData.DefaultIfEmpty()
            from upd1 in u.UserPropertyData.DefaultIfEmpty()
            where (upd.UserPropertyType.Alias == "Forename") && (upd1.UserPropertyType.Alias == "Surname")
            select new UserModel
            {
                Id = u.Id,
                Forename = upd.Value,
                Surname = upd1.Value,
                EmailAddress = u.Email
            });

此查询位于我的业务逻辑部分,并通过我的 WCF API 将用户模型传递给我的服务类,该服务类将模型传递给我的控制器,然后显示在视图中。

这种方法似乎不正确,因为数据访问和业务逻辑通过传回“视图模型”与 MVC 耦合。如果有人能想到更好的方法,我将不胜感激。

【问题讨论】:

    标签: wcf asp.net-mvc-3 entity-framework


    【解决方案1】:

    如果我理解正确,您是通过 WCF 进行数据访问吗?如果是这样,我将通过 WCF 服务返回业务数据(类),通过 MVC 应用程序的服务类映射到 ViewModel 类,然后将所有视图模型传递给控制器​​/视图。 如果我误解了你的问题,请纠正我。

    【讨论】:

    • 您的意思是通过 WCF 服务从上面的 linq 查询中返回选择。 Linq 查询不能通过 WCF 发送,可以吗?例如我不能在客户端建立查询?
    • 是的,将您的所有数据访问都包装在 WCF 服务中。这样,您的所有系统都可以使用这些 wcf 服务从数据库中检索 sata,如何使用/操作数据将完全取决于系统(在 mvc 应用程序的情况下,数据将被映射到视图模型以显示在视图)
    • 好的。但是对于某些页面,通过 WCF 服务接收的数据将与在视图中显示为“视图模型”的数据相同。通过 WCF 获取“视图模型”似乎并不正确
    • 在这些情况下,您不需要将业务实体映射到“视图模型”,只需将它们直接传递到您的控制器/视图即可。正如我上面所说,您的 WCF 服务将查询数据库并将业务实体返回给使用它们的任何应用程序/系统。
    • 好的,感谢您的帮助。这就是我使用的方法。就像我通过将业务实体接收为“视图模型”来将数据访问耦合到 MVC 应用程序
    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多