2013-05-06 24 views
30

Ho un progetto MVC 4 impostato e generato tutte le classi del modello utilizzando Entity Framework. Poi ho aggiunto una classe e l'ho denominata come "MyProjectEntities" e l'ho resa parziale, così posso aggiungere metodi personalizzati in quella classe. Ho aggiunto un sacco di metodi per interrogare il database in questa classe e va bene. Quando chiamo questi metodi però ottengo UnintentionalCodeFirstException. Non sono sicuro di cosa ho fatto di sbagliato?Entity Framework UnintentionalCodeFirstException

risposta

53

È necessario fornire la stringa di connessione corretta. Non solo le normali stringhe di tipo "Data Source =".

Si avrà una stringa di connessione che inizia con "metadata =" nel file di configurazione, utilizzare quello.

6

Si può anche trasformare la stringa di connessione semplice a una stringa di connessione al database-prima:

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(); 
} 

Background: nel mio progetto c'erano molte stringhe di connessione e abbiamo voluto tenerli semplici e confrontabili.