Bonjour,
Je rencontre un probl�me de base de donn�es sur un projet .NET Core Razor MVC.
Le code suivant parcourt tous les �l�ments d'une liste d'objets, et pour chacun, l'ins�re en BD en asynchrone.
Avec un seul objet dans la liste, bien s�r, aucun probl�me.
Avec plus d'objets : seule une partie est enregistr�e dans la BD, et j'obtiens toujours une erreur en cours de route.
L'erreur varie, parmi celles-ci (elles sont lev�es de mani�re un peu anarchique sur les lignes en rouge/gras dans le code ci-dessous) :
- La connexion n'est pas ferm�e. L'�tat actuel de la connexion est en cours de connexion.
- The context cannot be used while the model is being created. Thie exception may be thrown if the context is used inside OnModelCreating method or if the same context instance is accessed by multiple threads concurrently.
- Un DataReader associ� � cette Command est d�j� ouvert. Il doit d'abord �tre ferm�.
- Op�ration non valide. La connexion est ferm�e.
- Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions.
Je n'ai pas vraiment d'exp�rience en programmation asynchronej'imagine que c'est la source de mes erreurs...
Pourriez-vous svp me d�bloquer ?
Par avance merci
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13 private async Task<bool> SaveAllUtilisateursAsync(IEnumerable<Models.Utilisateur> users) { var userRepository = new UserRepository(); var userService = new UserService(); var taskList = users.Select(user => Task.Run(async () => { await SaveOneUtilisateursAsync(userRepository, userService, user); })); await Task.WhenAll(taskList); return userRepository.Save(); }
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 private async Task<bool> SaveOneUtilisateurAsync(UserRepository userRepository, UserService userService, Models.Utilisateur utilisateur) { var rechercheUtilisateur = userService.GetByIdImport(utilisateur.IdImport); if (rechercheUtilisateur.Count() == 0) userRepository.Insert(utilisateur); else userRepository.Update(utilisateur); return true; }
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public class UserService { private UserRepository dal; public UserService() { dal = new UserRepository(); } public IQueryable<User> GetByIdImport(int id) { return dal.Query<User>().Where(b => b.IdUser == id); } }
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public class UserRepository : IRepository { public DbContext dataContext; public UserRepository () { dataContext = new Models.UeerContext(); } public UserRepository (DbContext DataContext) { dataContext = DataContext; } public T Get<T>(int id) where T : class => dataContext.Set<T>().Find(id); public T SingleOrDefault<T>(System.Linq.Expressions.Expression<Func<T, bool>> predicate) where T : class => dataContext.Set<T>().SingleOrDefault(predicate); public void Insert<T>(T entity) where T : class { dataContext.Set<T>().Add(entity); dataContext.SaveChanges(); } public void Update<T>(T entity) where T : class { DbEntityEntry entityEntry = dataContext.Entry(entity); if (entityEntry.State == System.Data.Entity.EntityState.Detached) { dataContext.Set<T>().Attach(entity); entityEntry.State = System.Data.Entity.EntityState.Modified; } } }
Partager