3

Je suis en train d'implémenter un modèle de référentiel dans une application web api Asp.Net.Implémentation du modèle de référentiel générique - type de clé d'entité

public abstract class Repository<T> : IRepository<T> where T : EntityBase 
{ 
    private DbContext context_; 

    public Repository(DbContext context) 
    { 
     context_ = context; 
    } 

    public virtual async Task<T> GetAsync(int id) 
    { 
     return await context_.Set<T>().FindAsync(id); 
    } 

    ... 

} 

Problème:

Ici, j'ai une méthode GetAsync(int id), qui travaillera pour l'entité qui a une seule clé de type int.

Mais il existe une entité avec une clé de type string et certaines entités avec des clés composites.

Question:

Comment puis-je résoudre ce problème?

Est-il possible de résoudre le problème de manière générique?

Répondre

3

Vous pouvez remarquer que FindAsync accepte tableau d'objets en tant que paramètre, vous pouvez changer votre GetAsync comme ceci:

public virtual Task<T> GetAsync(params object[] keys) 
{ 
    return context_.Set<T>().FindAsync(keys); 
} 

Ensuite, vous pouvez appeler GetAsync avec toutes les clés que vous aimez, par exemple:

GetAsync(1); 
GetAsync("string key"); 
GetAsync(1, "composite key"); 

Side note: cadre Set<T> entité est déjà référentiel générique, ajoutant ainsi un autre dépôt sur que l'on n'ajoute pas vraiment beaucoup d'avantages.

+0

Merci! Je n'ai pas remarqué 'les paramètres object [] keys' – Rahul