2012-03-07 3 views
1

J'ai une classe du référentiel générique, voir ci-dessous, qui est utilisé pour exécuter des fonctions d'accès aux données communes, à savoir, Ajouter, GetByID etc.classe dérivée de dépôt générique

public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class 
    { 
    internal GolfEntities context; 
    internal DbSet<TEntity> dbSet; 

    public GenericRepository(GolfEntities context) 
    { 
     this.context = context; 
     this.dbSet = context.Set<TEntity>(); 
    } 

    public TEntity GetByID(object id) 
    { 
     return dbSet.Find(id); 
    } 

Je voudrais créer une autre classe du référentiel qui dérive de cette classe Generic Repository afin que je puisse effectuer d'autres fonctions qui n'appartiennent pas à la classe Generic Repository, comme, obtenir un nom complet d'utilisateurs.

J'ai créé aa classe appelée UserRepository, voir ci-dessous, qui dérive de la Cependant, je continue à obtenir une erreur lorsque je compile Repository générique,:

Repository.GenericRepository < utilisateur> ne contient pas un constructeur qui prend 0 arguments

public class UserRepository : GenericRepository<User>, IUserRepository 
{ 

    internal GolfEntities _context; 

    public UserRepository() : base() { } 

    public UserRepository(GolfEntities context) 
    { 
     _context = context; 
    } 

    public string FullName() 
    { 
     return "Full Name: Test FullName"; 
    } 


} 

Est-ce que quelqu'un sait comment résoudre ce problème?

Toute aide serait grandement appréciée.

Merci.

Répondre

5

Vous devez supprimer le constructeur par défaut de votre référentiel dérivé:

public UserRepository() : base() { } 

Depuis votre classe de référentiel de base ne dispose pas d'un constructeur appelant base() ne parameterless pas de sens. De même, vous n'avez pas besoin de répéter la même logique dans votre constructeur dérivé que dans celui de base. On ne pouvait l'invoquer:

public class UserRepository : GenericRepository<User>, IUserRepository 
{ 
    public UserRepository(GolfEntities context): base(context) 
    { 

    } 

    public string FullName() 
    { 
     return "Full Name: Test FullName"; 
    } 
} 
+0

Darin, si je fais ça, je reçois toujours la même erreur ... Repository.GenericRepository < User> ne contient pas un constructeur qui prend 0 arguments – tgriffiths

+0

@tgriffiths, notez-moi d'appeler le constructeur de base dans le constructeur dérivé: 'UserRepository publique (Contexte GolfEntities): base (contexte) '. –

+0

excellente réponse. Je vous remercie. – tgriffiths

1

Le référentiel de base (générique) ne dispose pas d'un parameterless, constructeur par défaut et donc vous ne pouvez pas écrire ceci:

public UserRepository() : base() { } 

Vous devez appeler un de la classe de base constructeurs.

3

Changer votre UserRepository à ceci:

public class UserRepository : GenericRepository<User>, IUserRepository 
{ 
    public UserRepository(GolfEntities context) 
     : base (context) 
    { 
    } 

    public string FullName() 
    { 
     return "Full Name: Test FullName"; 
    } 
} 

Votre GenericRepository n'a pas de constructeur par défaut de sorte que vous devez appeler le constructeur qui attend votre GolfEntities contexte et passer le paramètre vers le bas.

+0

Merci Trevor, c'est très utile. – tgriffiths

Questions connexes