簡體   English   中英

建立更好的數據訪問層

[英]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();
}

顯然,幕后發生了很多事情:

  • 從數據庫中生成了整個對象模型(您選擇要包含在模型中的表,並且可以在同一項目中創建多個模型)。
  • 有上下文,它管理數據庫連接並將您的Linq表達式轉換為數據庫查詢
  • 必須在.config文件中定義連接字符串,以便Entity Framework知道如何連接到數據庫

您應該能夠找到有關Entity Framework的大量信息,但是我發現學習的最簡單方法是跳入並開始嘗試做某事,然后在問題出現時找到答案。 我絕對不會嘗試在高度關鍵或對時間敏感的事情上立即使用它,因為肯定有一個學習曲線,一旦遇到一些陷阱,您將學習使用它的更好方法。

這是指向Microsoft的Entity Framework 4快速入門鏈接,鏈接應為您提供一些非常簡單的試用方法。 玩得開心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM