【问题标题】:WCF MVC calling stored proceduresWCF MVC 调用存储过程
【发布时间】:2012-01-25 12:20:56
【问题描述】:

我正在为一个大学项目开发​​一个 MVC3 应用程序。我希望使用 WCF 作为 Web 服务,以便能够使用存储过程连接到远程数据库。我目前真的没有时间学习实体框架。

我的问题是存储过程名称应该放在哪里? MVC 模型应该将存储过程名称与值等一起传递给 WCF 服务,还是应该简单地调用 WCF 服务中的一个方法,该方法将保存存储过程名称并处理该方面?

谢谢。

【问题讨论】:

    标签: c# wcf asp.net-mvc-3


    【解决方案1】:

    我的问题是存储过程名称应该放在哪里?

    在位于 WCF 服务项目中的数据访问层中。 ASP.NET MVC 3 应用程序仅调用此服务上的方法。请记住,ASP.NET MVC 应用程序不知道什么是数据库,更不知道什么是存储过程。 ASP.NET MVC 应用程序仅适用于模型、控制器和视图。

    因此,在您的 WCF 服务项目中,您将拥有一份服务合同:

    [ServiceContract]
    public interface IMyService
    {
        SomeModel Get(int id);
    }
    

    那么您可以在 WCF 服务中实现一个实现,该实现将去获取存储在任何位置的数据(在您的情况下,这将是一个 SQL 数据库,获取此数据的方法是调用存储过程):

    public class MyService: IMyService
    {
        public SomeModel Get(int id)
        {
            // here you can call the stored procedure and return the corresopnding model
            ...
        }
    }
    

    显然,这将使您的服务层与给定的数据访问技术紧密结合。为了将其解耦,您可以在服务和实际数据访问之间引入另一个抽象级别:

    public class MyService: IMyService
    {
        private readonly IMyRepository _repository;
        public MyService(IMyRepository repository)
        {
            _repository = repository;
        }
    
        public SomeModel Get(int id)
        {
            // you could do additional things in the service method
            // like validating the arguments, call data access methods, ...
            return _repository.Get(id);
        }
    }
    

    并且实际的存储过程调用将在存储库的特定 SQL 实现中执行,该存储库将由您的 DI 框架注入到您的服务中。

    在 ASP.NET MVC 应用程序中,您将只使用在添加服务引用时为您生成的强类型客户端代理中的 WCF 服务。

    【讨论】:

    • 谢谢达林。这就说得通了。如果可以的话,还有一件事。 WCF 服务能否仅对原始类型或 WCF 解决方案中声明的类型起作用?例如,如果我的 MVC 应用程序中有一个 Person 类,有没有办法将 Person 对象传递给 WCF 方法,或者我需要传递原始类型?谢谢。
    • @DarrenYoung,没有。在 WCF 服务项目中定义 Person 类。然后,当您导入此 WCF 服务的服务定义时,Person 类将自动导入到您的 ASP.NET MVC 应用程序中(假设它在您的服务合同中显示为某些服务操作的输入或输出)。服务契约中干预它们的方法和类型都将导入到你的 MVC 应用程序中。
    • 谢谢。我会稍微阅读一下服务定义等。
    【解决方案2】:

    存储过程名称应保存在位于 WCF 服务和实际数据库之间的数据访问层/库中。 IE。在您在 WCF 服务中调用哪些方法来获取数据的类中。

    【讨论】:

      猜你喜欢
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多