2016-10-04 1 views
-1

Essayer de comprendre comment obtenir l'ID de l'entité récemment ajoutée lors de l'utilisation du modèle de référentiel générique. Un exemple serait bien. est ici le dépôt,Comment obtenir l'ID de l'entité lors de l'utilisation du modèle de référentiel générique C#

public class Repository<T> : IRepository<T> where T : class { 
protected DbContext DbContext { get; set; } 
protected DbSet<T> DbSet { get; set; } 
public Repository(DbContext dbContext) 
{ 
if (dbContext == null) 
      throw new ArgumentNullException("dbContext"); 
     DbContext = dbContext; 
     DbSet = DbContext.Set<T>(); 
    } 
public virtual void Add(T entity) 
    { 
     DbEntityEntry dbEntityEntry = DbContext.Entry(entity); 
     if (dbEntityEntry.State == EntityState.Detached) 
     { 
      DbSet.Attach(entity); 
      dbEntityEntry.State = EntityState.Added; 
     } 
     else 
     { 
      DbSet.Add(entity); 
     } 
    } 
} 

entity.Id doen'st existe ici

+1

Lorsque vous ajoutez l'entité, sa propriété 'Id' sera remplie. vous devriez fournir du code. – Jonesopolis

+0

J'ai inclus la classe Generic Repository –

Répondre

0

Si vous entrez dans votre code, pendant la course, vous verrez le ID (tout ce que vous avez appelé) la propriété sera peuplée après l'ajout.

Votre problème n'est donc pas lié à l'infrastructure, mais à un référentiel générique. Vous avez besoin d'un moyen de retourner le (en supposant à nouveau) int ID que vous venez d'ajouter.

Créer une interface:

public interface IEntity 
{ 
    public int ID { get; set; } 
} 

et ont tous vos modèles en héritent. Ensuite, modifiez votre contrainte de type à:

public class Repository<T> : IRepository<T> where T : IEnitity 

alors, vous pouvez revenir entity.ID après l'enregistrement.

+0

J'ai commencé ce chemin avec l'interface et après avoir progressé, j'ai réalisé que le dbcreator n'utilisait pas ID comme clé primaire mais un autre champ. Après validation, l'autre champ était rempli avec la clé primaire correcte. –