TypeLoadException cu DbContext

Am 2 proiecte. Primul proiect este un proiect dll, al doilea este un site web mvc4. În DLL am un model de entitate de date de la care am generat automat DbContext.

În Global.asax inițializez db-ul cu această linie:

System.Data.Entity.Database.SetInitializer( new DropCreateDatabaseAlways() );

Când încep site-ul, primesc un Tip de Excepție

Server Error in '/' Application.
GenericArguments[0], WebConfigDB.WebConfigEntities, voor System.Data.Entity.IDatabaseInitializer`1[TContext] is in strijd met de beperking van typeparameter TContext.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.TypeLoadException: GenericArguments[0], WebConfigDB.WebConfigEntities, voor System.Data.Entity.IDatabaseInitializer`1[TContext] is in strijd met de beperking van typeparameter TContext.

Source Error:

Line 46: 
Line 47:            BundleTable.Bundles.EnableDefaultBundles();
Line 48:        }
Line 49:    }
Line 50: }


Source File: D:\projecten\MD2400\WebConfig\Global.asax.cs    Line: 48

Stack Trace:

[TypeLoadException: GenericArguments[0], WebConfigDB.WebConfigEntities, voor System.Data.Entity.IDatabaseInitializer`1[TContext] is in strijd met de beperking van typeparameter TContext.]
   WebConfig.MvcApplication.Application_Start() in D:\projecten\MD2400\WebConfig\Global.asax.cs:48

Cum pot rezolva această problemă?

1
puteți traduce excepțiile?
adăugat autor daryal, sursa

2 răspunsuri

Acest tip de eroare indică, de obicei, că diferite ansambluri se referă într-o oarecare măsură la diferite versiuni ale EntityFramework.dll. Asigurați-vă că toate proiectele dvs. (și orice altceva, ansamblurile de referințe) utilizează exact aceeași versiune. De asemenea, asigurați-vă că fie nu aveți EntityFramework.dll în GAC, fie că trebuie să îl aveți în GAC, atunci este, de asemenea, aceeași versiune ca cea la care se face referire.

Dacă utilizați o dependență externă care a fost construită împotriva unei versiuni diferite și nu puteți schimba acest lucru, atunci este posibil să fie necesar să setați redirecționări obligatorii pentru a vă asigura că CLR rezolvă în mod corespunzător versiunea.

5
adăugat

Traducerea excepției ar ajuta. Specificarea contextului în metoda generică a sunat la ajutor? Asa:

System.Data.Entity.Database.SetInitializer( new DropCreateDatabaseAlways() );

Cum treceți connectionString la clasa WebConfigEntities? Ai putea posta constructorul?

EntityFramework face unele magie pentru a prelua connectionString din fișierul .config . Poate că nu funcționează bine dacă aveți modelul într-un DLL separat. Asta nu inseamna ca nu poti avea modelul intr-un DLL, desigur. Am făcut asta pentru mai multe proiecte.

0
adăugat
Traducerea este: GenericArguments [0], WebConfigDB.WebConfigEntities, pentru System.Data.Entity.IDatabaseInitializer`1 [TContext] se opune limitelor parametrului de tip TContext.
adăugat autor Calypoter, sursa
Dacă specificăm contextul, primești și eroarea. Se pare că are de a face cu dll-ul. Nu primesc eroarea dacă modelul se află în proiectul site-ului web. Dar aș dori să aibă modele de baze de date într-un dll, deoarece este, de asemenea, utilizat într-un alt proiect.
adăugat autor Calypoter, sursa
Constructorul este public WebConfigDBEntity (): base ("name = WebConfigConnection") {} Și a fost adăugat la web.config
adăugat autor Calypoter, sursa