首页 文章

实体框架连接字符串“未找到服务器”

提问于
浏览
1

我使用以下DbContext设置了Code First

public class MyDatabaseDbContext : DbContext
{
    public MyDatabaseDbContext(string nameOrConnectionString)
        : base(nameOrConnectionString)
    {
    }

    public MyDatabaseDbContext()
        : base("MyDatabase")
    {
    }

    public DbSet<MyTable> MyTables { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}

我还设置了连接字符串来查看(本地)数据库

<connectionStrings>
<add name="MyDatabase" 
     connectionString="Server=(local);Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true"
     providerName="System.Data.SqlClient"
     />
 </connectionStrings>

还在Global.asax中设置初始化程序

Database.SetInitializer<MyDatabaseDbContext>(new DropCreateDatabaseAlways<MyDatabaseDbContext>());

然后我运行应用程序并调用DbContext(在我的情况下从控制器)

var dbContext = new MyDatabaseDbContext();
      var myTableResults = dbContext.MyTables.ToList();

我收到以下错误消息

EntityFramework.dll中出现“System.Data.SqlClient.SqlException”类型的异常但未在用户代码中处理附加信息: Build 与SQL Server的连接时发生与网络相关或特定于实例的错误 . 服务器未找到或无法访问 . 验证实例名称是否正确,以及SQL Server是否配置为允许远程连接 . (提供程序:SQL网络接口,错误:50 - 发生本地数据库运行时错误 . 无法获取本地应用程序数据路径 . 很可能未加载用户配置文件 . 如果在IIS下执行LocalDB,请确保启用了配置文件加载当前用户 .

在调试并查看dbContext变量> Database> Connection> ConnectionString属性时,我看到以下内容:“Data Source =(localdb)\ v12.0; AttachDbFilename = | DataDirectory | MyDatabase.mdf; Initial Catalog = MyDatabase; Integrated Security = True ; MultipleActiveResultSets =真”

Questions

为什么它指向(localDb)\ v12.0数据库而不是我的连接字符串?即便如此,为什么不在那里创建数据库,因为这是在我的开发机器上?

是否有某种惯例我忘记了我需要设定的内容 .

1 回答

  • 2

    您的连接字符串需要命名为MyDatabaseDb,或者您的上下文类需要命名为MyDatabaseContext .

    实体框架的约定是上下文类查找具有相同名称Context的连接字符串 . 你 class 名字中的Db是无关紧要的 .

相关问题