13

我正在尝试将 Code First 与我的本地 Sql Server 2008 R2 实例一起使用。我创建了一个用户'dev',可以使用 Sql Managment Studio 登录和创建数据库。问题是我在尝试使用 EntityFramework 中的 DbContext 创建数据库时不断收到错误消息。这是错误消息:

“在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问该服务器。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。SQL 网络接口,错误:26 - 错误定位服务器/实例指定“

我检查了我的 Sql Server 的错误消息,它确实允许远程连接。

我用以下代码抽象了我的系统并得到了同样的错误:

namespace CodeFirstConsole
{
    public class Program
    {
        static void Main(string[] args)
        {
            var db = new MyContext();
            try { Console.WriteLine(db.Parents.Count()); }
            catch (Exception) { throw; }
            Console.Read();
        }
    }

    internal class MyContext : DbContext
    {
        public DbSet<ParentObject> Parents { get; set; }
        public DbSet<ChildObject> Children { get; set; }

        public MyContext()
        {
            this.Database.Connection.ConnectionString =
                "Data Source=.;Database=ConsoleTest;Initial Catalog=ConsoleTest;User ID=dev;Password=dev;";
        }
    }

    internal class ParentObject
    {
        public int Id { get; set; }
        public string PropertyOne { get; set; }
    }

    internal class ChildObject
    {
        public int Id { get; set; }
        public bool PropertyOne { get; set; }
        public string PropertyTwo { get; set; }

        public virtual ParentObject Parent { get; set; }
    }

    internal class MyInitializer : DropCreateDatabaseAlways<MyContext>
    {

        protected override void Seed(MyContext context)
        {
            context.Parents.Add(new ParentObject() { PropertyOne = "hi" });
            base.Seed(context);
        }
    }
}
4

6 回答 6

25

我遇到了同样的错误,让我发疯了大约一天。我的情况是我有一个大型解决方案,其中包含一个预先存在的启动项目,并且我正在将 EF 添加到持久性项目中。

所以第一步是添加EF依赖。这在我的持久性项目中创建了一个具有正确 EF 内容的 app.config。然后我去了 Enable-Migrations 并在这篇文章中遇到了同样的错误。在这一点上,我没有想到将 EF app.config 设置复制到启动项目的 app.config 中,因为我认为在最终运行应用程序之前必须先尝试一下。

当我将解决方案启动项目更改为持久性项目时,问题得到解决,因此我可以让 EF 找到正确的 app.config。或者我可以将 EntityFramwework 相关部分复制到启动项目的 app.config 中。

于 2012-11-20T03:28:25.540 回答
1

在本地开发了相同的错误消息,但昨天运行良好。原来解决方案中的错误项目被设置为启动项目。

因此,如果您在 Package Manager Console 中的 update-database 命令后也收到此消息,请务必检查是否设置了正确的 StartUp Project。

例如 Web 项目,而不是辅助项目之一。Visual Studio 似乎有将其他项目设置为 StartUp 的习惯,有时...

于 2016-05-13T10:05:35.140 回答
0

尝试在这里查看它解释了很多原因,因为您在评论中指出您确实明确指定了服务器名称,并且代码也与 sql server 在同一台机器上运行,因为从我看到的数据源只有一个点,表明它与运行的 c# 代码程序是同一台机器。

http://blogs.msdn.com/b/sql_protocols/archive/2007/05/13/sql-network-interfaces-error-26-error-locating-server-instance-specified.aspx

于 2012-06-18T22:02:20.547 回答
0

这是我的解决方案 传统 SqlClient 可以找到服务器实例但 EF 不能

简而言之:

Database.SetInitializer<MyContext>(
new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>(
    useSuppliedContext: true));

这里的主要部分是useSuppledContext: true

于 2016-02-05T14:59:23.167 回答
0

还必须将 EntityFramework 依赖项添加到启动项目中。

Install-Package EntityFramework

并且还必须定义connectionStrings到我的主项目 App.config/Web.config。

<connectionStrings>
    <add name="Database" providerName="System.Data.SqlClient" connectionString="foo.bar" />
</connectionStrings>
于 2016-01-13T13:58:12.027 回答
0

我遇到了同样的问题,花了一整天的时间。终于找到@Christian 的答案,现在我找到了更好的方法!

放入ConnectionString启动项目。因此,您无需在每次更改实体时都进行切换。

于 2018-01-22T09:02:38.227 回答