2017-02-27 1 views
1

요즘 DapperExtensions에서 제안하는 몇 가지 기본 CRUD 함수를 사용하여 추상 기본 저장소를 만들려고합니다. 그러나 예제로 제공된 코드는 SQL Server 데이터베이스에 연결하기 위해 만들어진 SqlConnection을 사용합니다. 모든 종류의 데이터베이스 (SQL Server, MySql 등)에 연결할 수 있기를 원합니다. 또한 코드 샘플 코드 다음 DapperExtensions를보다 쉽게 ​​사용하기 위해 DatabaseFactory를 처리하는 DbContext를 생성하십시오.

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

는 그래서 만들 수도 생성, 접속의 개폐를 처리 할 수있는 DbContext을 만들 대해 생각되었다 보여 각 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; 
    } 
} 

편집 한 , 나는 최근에 게시 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; 
    } 
} 
관련 문제