我正在尋找一種方法來訪問存儲過程使用傳統的ADO.Net,因爲我是新的ASP.Net MVC我不知道該怎麼去做。使用ASP.Net MVC與經典ADO.Net
大多數示例顯示使用ADO.Net實體框架的CRUD操作。
我正在尋找一種方法來訪問存儲過程使用傳統的ADO.Net,因爲我是新的ASP.Net MVC我不知道該怎麼去做。使用ASP.Net MVC與經典ADO.Net
大多數示例顯示使用ADO.Net實體框架的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,E F,一些其他的ORM,調用一個外部的Web服務,XML,你的名字。
現在剩下的就是配置您最喜歡的DI框架,以便將正確的存儲庫實現注入到控制器中。如果明天你決定改變你的數據訪問技術,沒問題,只需編寫一個不同的IUsersRepository
接口實現,並重新配置你的DI框架來使用它。無需觸摸您的控制器邏輯。
您的MVC應用程序不再與數據的存儲方式相關聯。由於它們不再與特定的數據源緊密耦合,因此它可以更容易地單獨測試控制器。
非常好的方法 - 將它與Dapper結合起來,你可以爲自己節省另一個無聊的,令人難以置信的左右分配代碼... –
@marc_s,是的,從我的實驗來看,Dapper看起來像一個偉大的光 - 體重ORM。我已經在考慮我的下一個項目。我有點厭倦了NHibernate。 –
非常非常好的解釋。我非常欣賞將Repository設計模式和純Ado.net風格相結合的方式。謝謝@達林。 –
退房Dapper-dot-net - 這是推動這個網站 - 優秀,輕量,基於純ADO.NET,支持存儲過程非常好 - 不能說很多好東西!
ASP.NET MVC適用於您要使用的任何數據庫框架。您可以以任何您喜歡的方式(例如傳統的ADO.NET)檢索數據,並將生成的數據模型傳遞給視圖。您只需在視圖中指定模型的類型以匹配您傳遞給它的對象。
如果你知道如何使用ADO.NET,你可以在ASP.NET MVC中做到這一點(注意,這是完全不同的框架彼此沒有依賴關係)。
您可以將DataAccess代碼封裝到Repostitories中,並在控制器中使用這些存儲庫;
你能否給我任何參考鏈接。 @alexanderb –
只是將這兩篇文章連在一起。 http://stackoverflow.com/questions/2243898/displaying-standard-datatables-in-mvc – yedevtxt