ASP.Net MVCを初めて使用するため、その方法を知らないので、クラシックADO.Netを使用してストアドプロシージャにアクセスする方法を探しています。
ほとんどの例は、ADO.Net Entityフレームワークを使用したCRUD操作を示しています。
あなたはリポジトリを持つことができます:
public interface IUsersRepository
{
public User GetUser(int id);
}
それを実装します:
public class UsersRepository: IUsersRepository
{
private readonly string _connectionString;
public UsersRepository(string connectionString)
{
_connectionString = connectionString;
}
public User GetUser(int id)
{
// Here you are free to do whatever data access code you like
// You can invoke direct SQL queries, stored procedures, whatever
using (var conn = new SqlConnection(_connectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT id, name FROM users WHERE id = @id";
cmd.Parameters.AddWithValue("@id", id);
using (var reader = cmd.ExecuteReader())
{
if (!reader.Read())
{
return null;
}
return new User
{
Id = reader.GetInt32(reader.GetOrdinal("id")),
Name = reader.GetString(reader.GetOrdinal("name")),
}
}
}
}
}
そして、コントローラーはこのリポジトリを使用できます:
public class UsersController: Controller
{
private readonly IUsersRepository _repository;
public UsersController(IUsersRepository repository)
{
_repository = repository;
}
public ActionResult Index(int id)
{
var model = _repository.GetUser(id);
return View(model);
}
}
このように、コントローラーはデータアクセスレイヤーの実装に依存しなくなりました。プレーンADO.NET、NHibernate、EF、その他のORMを使用しているか、外部Webサービス、XMLを呼び出しているか、という名前を付けます。
あとは、お気に入りのDIフレームワークを構成して、リポジトリーの適切な実装をコントローラーに注入するだけです。明日、データアクセステクノロジを変更することに決めた場合、問題はありません。単にIUsersRepository
インターフェイスの異なる実装を記述し、それを使用するようにDIフレームワークを再構成します。コントローラのロジックに触れる必要はありません。
MVCアプリケーションは、データの保存方法に依存しなくなりました。これにより、特定のデータソースに密接に結合されなくなったコントローラーを単体で単体テストすることも容易になります。
Dapper-dot-net をチェックしてください-純粋なADO.NETに基づいた優れた軽量で、ストアドプロシージャを非常にうまくサポートしています-それについて十分なことを言うことができません!
ASP.NET MVCは、使用する任意のデータベースフレームワークで動作します。任意の方法(クラシックADO.NETなど)でデータを取得し、結果のデータモデルをビューに渡すことができます。ビューに渡すモデルに一致するモデルのタイプを指定するだけです。
ADO.NETでそれを行う方法を知っている場合は、ASP.NET MVCでそれを行うことができます(これは、完全に異なるフレームワークが互いに依存関係を持たないことに注意してください)。
DataAccessコードをRepostitoriesにカプセル化し、これらのリポジトリをコントローラーで使用できます。