2012-01-25 54 views
0

我正在開發一個大學項目的MVC3應用程序。我希望使用WCF作爲Web服務,以便能夠使用存儲過程連接到遠程數據庫。目前我沒有時間去學習Entity Framework。WCF MVC調用存儲過程

我的問題是應該在哪裏存儲存儲過程名稱? MVC模型是否應該將存儲過程名稱與值等一起傳遞給WCF服務,或者模型是否應該簡單地調用WCF服務中的一個方法,該方法將保存存儲過程名稱並處理該方面?

謝謝。

回答

4

我的問題是應該在哪裏存儲存儲過程的名稱?

位於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服務。

+0

謝謝Darin。這就說得通了。還有一件事,如果我可以。 WCF服務只能用於原始類型或WCF解決方案中聲明的那些類型嗎?例如,如果我的MVC應用程序中有一個Person類,是否有將Person對象傳遞給WCF方法的方法,還是需要傳入基本類型?謝謝。 –

+0

@DarrenYoung,no。在WCF服務項目中定義Person類。然後,當您導入此WCF服務的服務定義時,Person類將自動導入ASP.NET MVC應用程序中(假設它顯示爲服務合同中某些服務操作的輸入或輸出)。在服務合約中插入它們的方法和類型將全部導入到您的MVC應用程序中。 –

+0

謝謝。我會對服務定義等進行一些閱讀。 –

0

存儲過程名稱應保存在位於WCF服務和實際數據庫之間的數據訪問層/庫中。即在您的WCF服務中調用的方法來獲取數據的類中。