WCF MVC调用存储过程
本文关键字:存储过程 调用 MVC WCF | 更新日期: 2023-09-27 18:21:27
我正在为一个大学项目开发MVC3应用程序。我希望使用WCF作为web服务,以便能够使用存储过程连接到远程数据库。我现在真的没有时间学习实体框架。
我的问题是存储过程名称应该放在哪里?MVC模型应该将存储过程名称和值等一起传递给WCF服务,还是应该简单地调用WCF服务中的一个方法,该方法将保存存储过程名称并处理该方面?
谢谢。
我的问题是存储过程名称应该放在哪里?
在位于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方法来获取数据。