2015-07-01 6 views
6

W mojej aplikacji MVC4 mam odniesienie do mojego zestawu modelu EF. Wszystko działało dobrze. Nagle zacząłem dostawać poniżej komunikatu o błędzie.DbConfiguration instance used before 'EFConfiguration' type został odkryty

The default DbConfiguration instance was used by the Entity Framework before the 'EFConfiguration' type was discovered. An instance of 'EFConfiguration' must be set at application start before using any Entity Framework features or must be registered in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=260883 for more information. 

Używam EF 6. Jakiś pomysł, jaki może być powód? Sprawdzam dwukrotnie z bazą danych i jej aktualizacji i synchronizowane z EF dll.

Update: ja dostaję ten błąd, gdy próbuję instancję obiektowi kontekst

mEntities context = new Entities(); 

Dzięki

+0

gdzie próbujesz utworzyć instancję kontekstu? – Zippy

+0

W mojej witrynie MVC4. Mam zbiór EF.DLL, który zawiera wszystkie artefakty związane z EntityFramework, w tym klasy DbContext i mam na myśli ten zestaw w moim webaplikacji MVC4. – user2243747

+0

możesz dodać deklarację kontekstu i wywołanie do niej z Global.asax? – Zippy

Odpowiedz

-1

Niech twój problem bo masz klasę jak w tym przykładzie jesteś DAL

public class EfConfiguration : DbConfiguration 

w tym przypadku należy zainicjować przed użyciem EF kontekst w Global.asax

Rgds

+5

co masz na myśli - "zainicjować to"? Przykłady są zawsze mile widziane ... – barrypicker

+0

To może się zdarzyć, ponieważ masz więcej niż jeden projekt za pomocą EntityFramework, więc struktura encji ma kilka klas wewnętrznych, które są tworzone na całym świecie. Musisz poinformować EntityFramework z wyprzedzeniem (przed utworzeniem swojego DBContext) o swoich konfiguracjach DbConfigurations. W moim przypadku miałem 3 projekty korzystające z EF (2 MsSql, 1 Oracle). Wyrocznia wymaga innej konfiguracji Db. Musisz użyć tej konfiguracji DbConfiguration na swoim OracleDbContext i ustawić następujący wiersz podczas uruchamiania aplikacji, aby powiedzieć EF: DbConfiguration.SetConfiguration (new OracleDbConfiguration()); –

+2

Błąd ma link do strony Microsoftu, poświęć trochę czasu i przeczytaj uważnie, znajdziesz odpowiedź. Powodzenia! https://msdn.microsoft.com/en-us/data/jj680699 –

0

Po prostu chcę zostawić rozwiązanie dla osób mających podobny komunikat o błędzie. Jako link od Vinicius Paiva, to wyjaśnia, że ​​jeśli masz wiele dbcontex w różnych bibliotekach dll, powinieneś odwołać się do pliku DbConfiguration, jeśli utworzyłeś go w swoim kodzie. w moim przypadku miałem projekt lazury odwołujący się do projektu w projekcie DAL, a jedynym sposobem uzyskania projektu funkcji azure jest utworzenie częściowego pliku DbConfiguration na podstawie klasy i kodu.

Więc moje edmx rozszerzenie pliku DbContext z kodem poniżej

namespace myApp.Data.Models 
{ 
    [DbConfigurationType(typeof(myDBContextConfig))] 
    partial class myDBEntities 
    { 

     public myDBEntities(string connectionString) : base(connectionString) 
     { 
     } 
    } 

     public class myDBContextConfig : DbConfiguration 
     { 
      public myDBContextConfig() 
      { 
       SetProviderServices("System.Data.EntityClient", 
       SqlProviderServices.Instance); 
       SetDefaultConnectionFactory(new SqlConnectionFactory()); 
      } 
     } 
    } 

Ta biblioteka DAL był odwołującego nad projektem MVC, gdzie mieliśmy kolejny edmx instancji. Kiedy uruchomiłem ten projekt, rzuciłem ten wyjątek. Aby to naprawić. musisz rozszerzyć lub dodać węzeł entityFramework jak poniżej w pliku konfiguracyjnym (web.config w tym przypadku)

<entityFramework codeConfigurationType="myApp.Data.Models.myDBContextConfig , myApp.Data"> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="mssqllocaldb" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
Powiązane problemy