私の質問は、ストアドプロシージャ名はどこに保持する必要がありますか?
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
...
}
}
与えられたデータアクセス技術と明らかにこの意志しっかりカップルあなたのサービス層。注入されるリポジトリの特定のSQL実装で実行されます
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);
}
}
と実際のストアドプロシージャの呼び出し:それを分離するためには、サービスと実際のデータアクセスとの間の抽象化の別のレベルを持って来ることができますあなたのDIフレームワークによるあなたのサービス。
ASP.NET MVCアプリケーションでは、サービス参照を追加したときに生成された厳密に型指定されたクライアントプロキシからのみWCFサービスを消費します。
ありがとうございました。それは理にかなっている。私がすることができればもう一つのこと。 WCFサービスは、プリミティブ型またはWCFソリューション内で宣言された型に対してのみ機能しますか?たとえば、MVCアプリケーションにPersonクラスがある場合、PersonオブジェクトをWCFメソッドに渡す方法があるのですか、プリミティブ型を渡す必要がありますか?ありがとう。 –
@DarrenYoung、no。 WCFサービスプロジェクト内でPersonクラスを定義します。次に、このWCFサービスのサービス定義をインポートすると、PersonクラスはASP.NET MVCアプリケーションに自動的にインポートされます(サービス契約の一部のサービス操作の入力または出力として表示されることを前提とします)。サービスコントラクトでそれらに介入するメソッドとタイプは、すべてMVCアプリケーションにインポートされます。 –
ありがとうございます。私はサービスの定義などを少し読んでいます。 –