EntityFramework - 连接字符串在哪里?

Ian*_*ton 20 asp.net-mvc entity-framework-4 ef-code-first

我从web.config中删除了连接字符串,Entity Framework仍然连接到数据库!连接字符串在哪里设置?这是一个问题,因为我需要将我的网站的实时版本指向实时数据库.

小智 16

这是我在尝试连接到现有数据库时遇到的"约定优于配置"理念的问题(就像你正在做的那样).

如果您的DbContext类(例如Northwind)位于命名空间(例如MvcProject)中,由于某种原因,EF将不会将该类的名称与web.config中名为"Northwind"(或"MvcProject.Northwind")的连接字符串匹配,然后它将创建一个默认为本地SQLEXPRESS实例的连接字符串,其中包含一个名为"MvcProject.Northwind"的数据库.这将是一个空数据库.而且你会试图弄清楚为什么你没有得到任何数据,直到你意识到你没有连接到正确的数据库.

我解决这个问题的方式(不是优雅,但它是我发现修复它的最快方式):在DbContext类中添加一个构造函数,该类使用web.config中的连接字符串的名称调用base - 例如

namespace MvcProject
{
    public class Northwind : DbContext
    {
        public Northwind() : base("Northwind") {}
    }
}
Run Code Online (Sandbox Code Playgroud)

希望有人帮助那里;-)


小智 9

你需要这样的东西:

<configuration>
  <connectionStrings>
    <add name="MyContext"
         connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=YourDatabaseName"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

或者,如果您的数据库所在的是App_Data文件夹:

<configuration>
  <connectionStrings>
    <add name="MyContext"
         connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|YourDatabaseFilename.mdf;User Instance=True"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

替换MyContext为扩展的类的名称DbContext.


nee*_*ebz 0

右键单击实体框架模式(edmx 文件)> 转到属性。您会在那里看到连接字符串。

如果您的实体模型位于单独的项目中,则它必须位于其自己的设置文件中。