WCF MVC调用存储过程

本文关键字:存储过程 调用 MVC WCF | 更新日期: 2023-09-27 18:21:27

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

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

谢谢。

WCF MVC调用存储过程

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

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

因此,在您的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服务中调用who方法来获取数据。