Je m'interroge sur les risques / la security de l'utilisation d'un context EF avec sp_getapplock
et le type de propriétaire de session. D'après les docs , je crois comprendre qu'un propriétaire de session veut dire que le verrou sera libéré lorsque la session se terminera, s'il n'est pas explicitement publié avant cela. Je suppose que cela signifie également que la connection se termine.
Tout cela fonctionne déjà avec des verrous appartenant à des transactions, mais cela entraîne d'autres problèmes et complications, alors je me pose des questions sur les verrous appartenant à des sessions et sur la manière dont cela va ou non entrer en DbContext
avec le comportement de DbContext
et ses gestion des connections.
Je ne suis pas sûr à 100% comment DbContext
fonctionne par défaut, qu'il utilise un pool ou que chaque instance de context ouvre et ferme ses propres connections (les documents que j'ai lus semblent suggérer le dernier). Pour cette question, supposons que je ne fais rien avec la gestion des connections (ce que je fais rarement), donc EF gère cela, ou tout ce qui gère la gestion.
Si je crée une instance DbContext
, saisis la connection, exécute SQL pour créer un verrou appartenant à une session , utilise le context comme d'habitude, ne libère pas le verrou et ne dispose pas du context, cela fonctionnera-t-il correctement? (En réalité, ce serait dans un emballage IDisposable
pour empêcher cela, mais la question demeure.)
Pour illustrer mal:
using (var ctx = new MyContext()) { var conn = ctx.Database.Connection.Open(); conn.ExecuteSqlSomehow("sp_getapplock blahblah"); try { // Lots of queries, savechanges, etc. } finally { // Oops I forgot to conn.ExecuteSql("sp_release the lock"); } } await WatchMovieAsync(); using (var ctx = new MyContext()) { // Can this reuse the same connection, session and/or lock? }
Des questions:
using
? SaveChanges
), libérant ainsi le verrou?