[英]build a better data access layer
為了訪問我的數據庫並使用我的存儲過程,我做了一個非常簡單的數據訪問層(如果有人可以稱其為“層”)。 我有8個文件,每個文件看起來像:
using System;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
public class TasksDBHandler
{
private static Database db = DatabaseFactory.CreateDatabase("DBNAME");
public static void SetTaskDepreciationData(long taskId, long fieldId, string value)
{
DbCommand command = db.GetStoredProcCommand("dbo.P_CUS_TSK_SetTaskDepreciationData");
db.AddInParameter(command, "@task_id", DbType.Int64, taskId);
db.AddInParameter(command, "@field_id", DbType.Int64, field);
db.AddInParameter(command, "@value", DbType.String, value);
db.ExecuteNonQuery(command);
}
//Many more stored procedures calls
}
我想建立一個新的更好的數據訪問層,但我不知道它的外觀。 我希望能夠使用存儲過程,而無需為每個存儲過程編寫靜態方法,我想要更好的連接管理,等等。
有人知道如何執行此操作嗎?
我正在使用.Net和SQL SERVER。
您是否看過其中的任何ORM產品? 有Linq2Sql,實體框架,NHibernate等。 除非您需要做的是非常基礎的,否則學習使用現有框架可能比嘗試編寫自己的框架會有更好的結果。
在像Entity Framework這樣的ORM中,您通常不手動管理連接,它從數據庫中定義一個對象(或實體)模型,並定義一個“上下文”,該上下文負責從數據庫中檢索數據並將其映射到正確的數據。實體模型中類的屬性。 因此,您從上下文中請求某些內容,它將滿足您的請求所需的數據加載到內存中,像其他類一樣使用它,然后告訴上下文將您的更改保存回數據庫中。 在實體框架中有幾種與實體模型進行交互的方法,但是我將使用的示例是Linq2Entities。 您編寫一個Linq查詢,上下文負責將其轉換為針對數據庫的查詢* 免責聲明:我沒有嘗試運行此代碼,它只是作為示例。
using(MyEntitiesContext context = new MyEntitiesContext())
{
var idleUsers = from u in context.User
where u.LoggedIn && u.LastActivity > DateTime.Now.AddMinutes(-30)
select u;
foreach(User u in idleUsers)
{
u.Status = UserStatus.Idle;
}
context.SaveChanges();
}
顯然,幕后發生了很多事情:
您應該能夠找到有關Entity Framework的大量信息,但是我發現學習的最簡單方法是跳入並開始嘗試做某事,然后在問題出現時找到答案。 我絕對不會嘗試在高度關鍵或對時間敏感的事情上立即使用它,因為肯定有一個學習曲線,一旦遇到一些陷阱,您將學習使用它的更好方法。
這是指向Microsoft的Entity Framework 4快速入門的鏈接,該鏈接應為您提供一些非常簡單的試用方法。 玩得開心!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.