2017-05-20 2 views
-1

J'aime DAL with dapper approche et en regardant faire quelque chose de similaire moi-même. comment utiliser la classe de référentiel de base, puis comment appeler ceux du niveau de service? J'utilise également la portée de la transaction dans le niveau de service. S'il vous plaît quelqu'un donner un exemple de solution pour passer les arguments dans la couche de service? ou toute autre solution?Call Repository classe dans le service Couche en C# et dapper

public class Repository<T> where T : class 
{ 
    protected readonly IComplianceConnection Connection; 

    public Repository(IComplianceConnection connection) 
    { 
     Connection = connection; 
    } 

    public IEnumerable<T> Get(string query, object arguments) 
    { 
     IList<T> entities; 

     using (var connection = Connection.OpenConnection()) 
     { 
      entities = connection.Query<T>(query, arguments, commandType: CommandType.StoredProcedure).ToList(); 
     } 

     return entities; 
    } 

    public T GetSingleOrDefault(string query, object arguments) 
    { 
     T entity; 

     using (var connection = Connection.OpenConnection()) 
     { 
      entity = 
       connection.Query<T>(query, arguments, commandType: CommandType.StoredProcedure).SingleOrDefault(); 
     } 

     return entity; 
    } 

    public void Update(string query, object arguments) 
    { 
     using (var connection = Connection.OpenConnection()) 
     { 
      connection.Execute(query, arguments, commandType: CommandType.StoredProcedure); 
     } 
    } 

    public int ExecuteScalar(string query, object arguments) 
    { 
     var id = 0; 
     using (var connection = Connection.OpenConnection()) 
     { 
      id = connection.ExecuteScalar<int>(query, arguments, commandType: CommandType.StoredProcedure); 
     } 
     return id; 
    } 
} 

Répondre

1

Vous avez vraiment besoin de vous demander quelle est la valeur ajoutée de ce style de classe. Le fait qu'il n'y a rien de spécifique à votre domaine d'application devrait déclencher des alarmes. Votre classe ajoute essentiellement la gestion (très basique) de la connexion et définit le type de commande à StoredProcedure, mais supprime la possibilité de tout autre type de commande, et tout autre type de gestion de connexion: transactions, travaillant directement avec IEnumerable (et évitant mémoire avec un grand ensemble de résultats)

Une bonne raison pour écorcher Dapper serait de fournir un 'repo' qui pourrait être raillé, pour vous permettre de tester votre unité de code d'appel. Cette classe pourrait faire cela, mais vous seriez mieux avec une interface, et mieux avec quelque chose qui n'a pas réduit drastiquement les possibilités de Dapper.