2017-02-27 9 views
1

今日、DapperExtensionsで提案されている基本的なCRUD関数を使用して抽象ベースリポジトリを作成しようとしています。しかし、exempleとして与えられたコードは、SQL Serverデータベースに接続するために作られたSqlConnectionを使用しています。私はすべての種類のデータベース(SQL Server、MySqlなど)に接続できるようにしたい。以下のコードは、だから私は、接続の開閉、作成を扱うことができるDbContextを作成しようと考えていたとも作成することができますDapperExtensionsをより使いやすくするためにDatabaseFactoryを扱うDbContextを作成する

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

を示したとしても、自分のコードサンプルは、各CRUD機能のために繰り返されます適切な接続オブジェクトは、使用するデータベースタイプ(データベースファクトリの種類)にしたがいます。

既にコードを共有しているコードがありますか?

ありがとう!

+0

真のORMの機能を構築しようとしているようです。 Entity FrameworkとNHibernateの両方を試してみましたか?また、サービスの人気が高いために何百万ものレコードと非常に高いトラフィックが発生するため、両方のアプリケーションが単純に遅すぎるという経験豊富なベンチマークを締結しましたか? –

答えて

0

あなたはDapper-Extensionsを使用しています。次のコードはDapperのみです。しかし、それは全体のコンセプトを変えるものではありません。 sqlの代わりにpocoを渡す必要があります。

thisIUnitOfWorkDalSessionの実装方法の回答を参照してください。以下のコードでは、BaseDalBaseRepositoryとちょうど同じです。

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 Dapperの-Extensionsでのコード例については、私が最近投稿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; 
    } 
} 
関連する問題