2013-05-06 7 views
30

Ich habe ein MVC 4-Projekt eingerichtet und generiert alle Modellklassen mit Entity Framework. Dann fügte ich eine Klasse hinzu und benannte sie genauso wie die Klasse "MyProjectEntities" und machte sie partiell, so dass ich personalisierte Methoden in dieser Klasse hinzufügen kann. Ich habe eine Menge Methoden hinzugefügt, um die Datenbank in dieser Klasse abzufragen, und sie baut sich gut auf. Wenn ich diese Methoden zwar aufruft, bekomme ich UnintentionalCodeFirstException. Ich bin mir nicht sicher, was ich falsch gemacht habe?Entity Framework UnintentionalCodeFirstException

Antwort

53

Sie müssen die korrekte Verbindungszeichenfolge angeben. Nicht nur die normalen Zeichenfolgen vom Typ "Data Source =".

Sie haben eine Verbindungszeichenfolge, die mit "metadata =" in Ihrer Konfigurationsdatei beginnt, verwenden Sie diese.

6

Sie können auch die einfache Verbindungszeichenfolge in eine Datenbank-Verbindungszeichenfolge ersten transformieren:

public static string BuildEntityConnectionStringFromAppSettings(string nameOfConnectionString) 
{ 
    var shortConnectionString = GetConnectionStringByName(nameOfConnectionString); 

    // Specify the provider name, server and database. 
    string providerName = "System.Data.SqlClient"; 

    // Initialize the connection string builder for the 
    // underlying provider taking the short connection string. 
    SqlConnectionStringBuilder sqlBuilder = 
     new SqlConnectionStringBuilder(shortConnectionString); 

    // Set the properties for the data source. 
    sqlBuilder.IntegratedSecurity = false; 

    // Build the SqlConnection connection string. 
    string providerString = sqlBuilder.ToString(); 

    // Initialize the EntityConnectionStringBuilder. 
    EntityConnectionStringBuilder entityBuilder = 
     new EntityConnectionStringBuilder(); 

    //Set the provider name. 
    entityBuilder.Provider = providerName; 

    // Set the provider-specific connection string. 
    entityBuilder.ProviderConnectionString = providerString; 

    // Set the Metadata location. 
    entityBuilder.Metadata = String.Format("res://*/Application.{0}.Data.Model.{0}Model.csdl|res://*/Application.{0}.Data.Model.{0}Model.ssdl|res://*/Application.{0}.Data.Model.{0}Model.msl", nameOfConnectionString); 
    return entityBuilder.ToString(); 
} 

Hintergrund: in meinem Projekt gibt es viele Verbindungszeichenfolgen waren und wir wollten, dass sie einfach und vergleichbar halten.