ASP MVC, Ninject, EF   otázka

C#, ASP.NET MVC, Entity Framework

Zdravím,

hledám někoho kdo má zkušenosti s touhle trojkombinací. :-)

Snažím se injectovat DbContext pomocí Ninjectu a používám InRequestScope přístup, což by měl být správny přístup. Přesto však dostávám výjimky:

New transaction is not allowed because there are other threads running in the session.

nebo, že už byl DbContext uvolňen.

V jednom requestu volám několik objektů, do kterých se injectuje DbContext, jestli to dobře chápu tak by ten DbContext měl být sdílen pro všechny tyto objekty.

V těch objektech nemám žádné foreache, kde bych volal SaveChanges() což by vedlo na tu prvním výjimku.

Jen si výtahnu entitu, z té vezmu např. Id a na základě toho vytvořím jinou entitu a tu uložím. Takže nechápu jaká transakce tam "visí".

Když zruším "InRequestScope" a nechám Ninject vytvářet DbContext, když je třeba, tak to sice funguje, ale ten context se neuvolňuje, což není správně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravíčko,

pokud to funguje tak jako u ostatních, tak Ninject umisťuje DBContext do HttpContextu, tedy je skutečně jen 1 za request, problém nastává pokud v tom jednom requestu máte nějakou asynchronicitu, tedy více vláken, nebo nějaký Async metody bez Awaitu..

DBContext entity frameworku není threadsafe, pokud se používá tedy z více vláken, spadne to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback