-2

je mets en œuvre pour la première fois dans mon projet MVC Repository et Unité de modèles de travail pour obtenir et insérer record dans DB en lisant cet article:Comment obtenir l'entité Identity insérée dans le référentiel d'implémentation et l'unité de modèles de travail?

Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application

des thats façon agréable et tout fonctionne bien sauf obtenir ID d'enregistrements cela inséré dans la base de données. Je ne peux pas obtenir l'ID d'identité dans la base de données lorsque l'enregistrement est inséré dedans. quelqu'un peut m'aider à résoudre ce problème?

** --- Date de fin --- **

OK! ce code est - unité de travail:

enter code here 




public class UnitOfWork : IDisposable 
{ 
    private SchoolContext context = new SchoolContext(); 
    private GenericRepository<Department> departmentRepository; 
    private GenericRepository<Course> courseRepository; 

    public GenericRepository<Department> DepartmentRepository 
    { 
     get 
     { 

      if (this.departmentRepository == null) 
      { 
       this.departmentRepository = new GenericRepository<Department>(context); 
      } 
      return departmentRepository; 
     } 
    } 

    public GenericRepository<Course> CourseRepository 
    { 
     get 
     { 

      if (this.courseRepository == null) 
      { 
       this.courseRepository = new GenericRepository<Course>(context); 
      } 
      return courseRepository; 
     } 
    } 

    public void Save() 
    { 
     context.SaveChanges(); 
    } 

    private bool disposed = false; 

    protected virtual void Dispose(bool disposing) 
    { 
     if (!this.disposed) 
     { 
      if (disposing) 
      { 
       context.Dispose(); 
      } 
     } 
     this.disposed = true; 
    } 

    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 
} 

et c'est la couche DAL:

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

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

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

    public virtual void Insert(TEntity entity) 
    { 
     dbSet.Add(entity); 
    } 

    public virtual void Delete(object id) 
    { 
     TEntity entityToDelete = dbSet.Find(id); 
     Delete(entityToDelete); 
    } 

    public virtual void Delete(TEntity entityToDelete) 
    { 
     if (context.Entry(entityToDelete).State == EntityState.Detached) 
     { 
      dbSet.Attach(entityToDelete); 
     } 
     dbSet.Remove(entityToDelete); 
    } 

    public virtual void Update(TEntity entityToUpdate) 
    { 
     dbSet.Attach(entityToUpdate); 
     context.Entry(entityToUpdate).State = EntityState.Modified; 
    } 
} 

}

Maintenant, je cherche un moyen de se retourne id quand insérer une ligne dans la base de données?

+0

Si vous avez Entity Framework, et une colonne ** identity ** dans la base de données, la valeur 'ID' nouvellement insérée sera présente dans votre entité EF après que vous avez appelé '.SaveChanges()' - juste comme ça - pas d'extra travail nécessaire –

+0

@marc_s Je sais qu'après saveChange nous pouvons obtenir l'ID mais dans l'unité de travail je ne peux pas l'obtenir – Mohammad

+1

Pourquoi avez-vous besoin de la classe 'Id' dans' UoW'? quel est ton scénario? –

Répondre

0

J'ai résolu! mais si simple :(

quand je l'appelle UOW j'utiliser ce code:

  unitOfWork.AccountAllUsersRepository.Insert(AccountsMappers.ConvertCreateAccountsToAccounts(createAccounts)); 
     unitOfWork.Save(); 
     long CreatedAccountID = accountAllUsers.Id; 

mais quand je jetai à mon identifiant du modèle principal me retourné et a bien fonctionné:

 AccountAllUsers _AccountAllUsers = (AccountAllUsers)AccountsMappers.ConvertCreateAccountsToAccounts(createAccounts); 
      unitOfWork.AccountAllUsersRepository.Insert(_AccountAllUsers); 
     unitOfWork.Save(); 
     long CreatedAccountID = _AccountAllUsers.Id; 
+0

*** Dépôts sur Top UnitOfWork ne sont pas une bonne idée *** http://rob.conery.io/2014/03/04/repositories-and-unitofwork-are-not-a -bonne idée/ – Kiquenet