2013-05-06 150 views
30

我有一个MVC 4项目建立并使用实体框架生成所有模型类。然后,我添加了一个类,并将其命名为“MyProjectEntities”类,并将其作为部分名称,以便我可以在该类中添加个性化方法。我添加了一堆方法来查询这个类中的数据库,它的构建很好。当我调用这些方法虽然我得到UnintentionalCodeFirstException。我不确定我做错了什么?实体框架UnintentionalCodeFirstException

回答

53

您需要提供正确的连接字符串。不只是正常的“数据源=”类型的字符串。

您将在配置文件中有一个以“metadata =”开头的连接字符串,使用该字符串。

6

您还可以将简单的连接字符串到数据库,第一连接字符串:

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

背景:在我的项目有许多连接字符串,我们也想保持简单和可比性。