2013-05-06 10 views
30

Mam projektu MVC 4 skonfigurować i generowane wszystkie klasy modelu przy użyciu Entity Framework. Następnie dodałem klasę i nadałem jej taką samą nazwę jak klasa "MyProjectEntities" i uczyniłem ją częściową, dzięki czemu mogę dodawać spersonalizowane metody w tej klasie. Dodałem kilka metod do bazy danych zapytanie w tej klasie i to dobrze. Kiedy wywołuję te metody, mimo że otrzymuję UnintentionalCodeFirstException. Nie jestem pewien, co zrobiłem źle?Entity Framework UnintentionalCodeFirstException

Odpowiedz

53

Musisz podać poprawny ciąg połączenia. Nie tylko zwykłe ciągi znaków "Data Source =".

Będziesz mieć ciąg połączenia, który zaczyna się od "metadata =" w pliku konfiguracyjnym, użyj tego.

6

Można również przekształcić prosty ciąg połączenia ciąg połączenia bazy pierwszego:

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

Tło: w moim projekcie było wiele ciągów połączenia i chcieliśmy zachować je proste i porównywalne.