SqlCe.40 EntityFrameWork 4.3.1 Code first Windows.Forms
Hallo und frohe Ostern
Ich habe eine Anwendung bei der plötzlich die Fehlermeldung:
Fehlermeldung:
Der Typeninitialisierer für "System.Data.Entity.Internal.AppConfig" hat eine Ausnahme verursacht.
bei der initilaisierung des DBContextes auftaucht.
Bis vor kurzem funktionerte alles Wunderbar. Der Fehler kam aus dem Nichts.
Der Initialisierungscode:
StoreClientEntities db=new StoreClientEntities();
...
nichts weiter.
Zuerst arbeitete ich so:
StoreClientEntities db;
...
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
db = new StoreClientEntities();
...
}
Als dann nichts mehr ging und alle Debug-Haltepunkte übersprungen wurden wechselte ich zur oberen Version und erhielt dann eben die Fehlermeldung.
Hier noch die config:
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="StoreClientEntities"
connectionString="Data Source=|DataDirectory|\StoreClientEntities.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0"
invariant="System.Data.SqlServerCe.4.0"
description=".NET Framework Data Provider for Microsoft SQL Server Compact"
type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>
</system.data>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
Was kann dies verursachen?
Gruss
Generell solltest Du dort einen Context erstellen, wo Du auch wirklich drauf zugreifen musst.
Dass der afehler mit Deinem Load direkt was zutun hat bezweifel ich ein wenig.
Scheint eher so, als ob Du eventuell zwei EF Versionen mischst; oder falsche Metadaten hast, oder der Connectionstring nicht mehr stimmt - oder das DB File kaputt ist.
Wie wich das EF aber generell bei CE verhaelt weis ich nicht.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Zuerst einmal vielen dank für die Antwort
Ok, das mit den EF Versionen werd ich überprüfen, die db hab ich mittlerweile gelöscht, somit kann es nicht (mehr) am connectionstring und der DB liegen.Und wo gibt es denn bei codefirst metadaten?
Das mit den Ressourcen schonen ist so eine Sache, da CE kein Verbindungspooling kennt und sowieso singleuseranwendung ist, erlaube ich mir nur einmal die Verbindung zu öffnen und beim Beenden zu schliessen.
Gruss
Ich hatte überlesen, dass es CodeFirst ist 😉 War aber auch eine allgemeine Antwort.
Kenne CE nicht; nie mit gearbeitet. Weiß nicht wie hier die Resourcenverwaltung ist; aber generell hat man die Verbindung halt nur dort, wo man sie auch wirklich braucht.
Bedenke in diesem Zusammenhang auch (allgemein) das Thema Threads, und dass das EF nicht Thread-sicher ist - ganz egal obs ein User ist oder 50 😃
Ich kann Dich beim Thema CE und dem Fehler hier Dich höchstens auf den richtigen Weg schubsen; aus versehen. Mit Sicherheit kann ich Dir nicht sagen, woran dies liegt.
Wenn man aber nach dem Fehler Google befragt, so sind die ersten Treffer allesamt Bug Reports in Zusammenhang mit dem EF 4.3.1, das auch Du hast.
Ein Patch scheint es noch nicht zu geben; wird auch nur davon gesprochen, dass es in ein paar Wochen einen Patch geben wird (Stand Februar).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich habe jetzt vorübergehend (auf) normales EF umgestellt und es klappt ohne Probleme. Zum Glück war es nichts grosses. Code First auf dem Desktop?
(momentan) Besser nicht 😉
Gruss
Balaban_S