2016-09-21 1 views
-1

Je cherche de l'aide ou des pointeurs pour expliquer un peu plus sur la génération de l'ensemble Data Access Layer avec un template T4. Par exemple toutes les instructions INSERT etc. et les méthodes C# l'implémentant.Générer un Data Access Layer avec le template t4

+1

Pourquoi vous générez couche d'accès aux données. @Marco Munnik – zahed

+1

Une raison pour laquelle vous ne voulez pas utiliser EF? Ensuite, vous n'avez pas besoin de cela, ou du modèle de référentiel car EF est déjà en train d'implémenter le modèle de référentiel/unité de travail. –

Répondre

1

Vous ne devriez pas faire cela, essayez le modèle Generic Repository à la place, vous vous retrouverez avec une seule interface avec une seule implémentation en utilisant Generics qui peut être utilisé pour n'importe quel type dans votre modèle.

public interface IRepository<T, K> where T : class 
    { 
     T Add(T item); 
     bool Update(T item); 
     bool DeleteById(K id); 
    } 

mise en œuvre

public class EFRepository<T, K> : IRepository<T, K>, IDisposable where T : class 
    { 
     protected readonly DbContext _dbContext; 
     private readonly DbSet<T> _entitySet; 

     public EFRepository(DbContext context) 
     { 
      _dbContext = context; 
      _entitySet = _dbContext.Set<T>(); 
     } 

     public T Add(T item) 
     { 
      item = _entitySet.Add(item); 
      _dbContext.SaveChanges(); 
      return item; 
     } 

     public bool Update(T item) 
     { 
      _entitySet.Attach(item); 
      _dbContext.Entry(item).State = EntityState.Modified; 
      _dbContext.SaveChanges(); 
      return true; 
     } 

     public bool DeleteById(K id) 
     { 
      var item = _entitySet.Find(id); 
      _entitySet.Remove(item); 
      _dbContext.SaveChanges(); 
      return true; 
     } 
} 
+1

Envelopper EF avec une structure de "référentiel" comme ceci est inutile. La fonctionnalité est déjà fournie par 'DbSet' et' DbContext'. – Stijn

+2

@Haitham Shaddad Je vais utiliser les mêmes mots: "tu ne devrais pas faire ça" http://rob.conery.io/2014/03/04/repositories-and-unitofwork-are-not-a-good-idea/ –

+2

@Stijn La fonctionnalité existe dans DbSet mais vous ne pouvez pas l'utiliser directement dans votre couche de service ou d'interface utilisateur, même si vous voulez supprimer EntityFramework et utiliser une autre couche d'accès aux données, cela ne sera pas possible sans un rééquipement majeur –