2017-02-27 62 views
1

這一天我嘗試使用DapperExtensions提出的一些基本的CRUD函數創建一個抽象的基礎知識庫。但是,作爲例子給出的代碼使用SqlConnection來連接到SQL Server數據庫。我希望能夠連接到各種數據庫(SQL Server,MySql等)。此外他們的代碼樣本重複如下面的代碼顯示創建一個處理DatabaseFactory以便更容易使用DapperExtensions的DbContext

using (SqlConnection cn = new SqlConnection(_connectionString)) 
{ 
    cn.Open(); 
    //Code doing something here... 
    cn.Close(); 
} 

,所以我想創造一個的DbContext,可以處理的創建,連接的開啓和關閉,也可以創建每個CRUD功能正確的連接對象取決於我想要使用的數據庫類型(一種數據庫工廠)。

有沒有人已經做到了,可以分享他的代碼?

謝謝你們!

+0

這聽起來像你正在試圖建立一個真正的ORM的設施。您是否嘗試過實體框架和NHibernate,並通過廣泛的經驗性基準測試得出結論:對於您的應用程序而言,這兩者實際上都太慢了,因爲您的服務具有令人難以置信的流行性,因此您擁有數百萬條記錄和極高的流量。 –

回答

0

您正在使用Dapper-Extensions;以下代碼僅適用於Dapper。但它並沒有改變整個概念。而不是sql你需要通過poco

請參閱this回答我如何實施IUnitOfWorkDalSession。在下面的代碼中,BaseDal就像BaseRepository

public abstract class BaseDal 
{ 
    internal BaseDal(IUnitOfWork unitOfWork) 
    { 
     dapperHandler = new DapperHandler(unitOfWork); 
    } 

    DapperHandler dapperHandler = null; 

    protected T Get<T>(string sql, DynamicParameters param) where T : class 
    { 
     var result = dapperHandler.Query<T>(sql, param).FirstOrDefault(); 
     return result; 
    } 

    protected List<T> GetList<T>(string sql, DynamicParameters param) where T : class 
    { 
     var result = dapperHandler.Query<T>(sql, param).ToList(); 
     return result; 
    } 

    protected int Insert(string sql, DynamicParameters param) 
    { 
     var result = dapperHandler.Execute(sql, param); 
     return result; 
    } 
} 

編輯1 對於小巧玲瓏的擴展示例代碼,請參閱this答案,我最近公佈。

0
public abstract class ABaseRepository<M> : IBaseRepository<M> 
     where M : BaseModel 
    { 
     private static DbProviderFactory factory = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ProviderName); 
     protected static DbConnection connection; 

    public static IDbConnection CreateOpenConnection() 
    { 
     connection = factory.CreateConnection(); 
     connection.Open(); 

     return connection; 
    } 

    public dynamic Insert(M model) 
    { 
     dynamic multiKey; 
     using (IDbConnection con = CreateOpenConnection()) 
     { 
      multiKey = con.Insert(model); 
     } 

     return multiKey; 
    } 
} 
相關問題