使用Entity Framework迁移时SQL Server连接抛出异常 - 添加代码段

时间:2016-07-14 01:35:42

标签: c# sql-server entity-framework

我有一个简单的C#解决方案,它有一个实体类和一个上下文类,还有一个控制台应用程序,我用它来测试实体框架的迁移。但我总是得到这个错误:

  

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

以下是app.config中的连接字符串(我将其放在控制台app.config和上下文类app.config中):

<add name="ZzaDbConnectionString" 
     connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Zza;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite‌​;MultiSubnetFailover=False" 
     providerName="System.Data.SqlClient" />

我从&#34;连接字符串&#34;复制了连接字符串。 SQL Server ObjectExplorer数据库的属性所以我认为它很好。

有什么建议它总是抛出这个例外吗?

我添加了实体类,上下文类和控制台类,希望这会对我的问题有一些澄清。

这是实体类。

namespace Zza.Entities
{
    public class Customer
    {
        public Guid Id { get; set; }

        [MaxLength(50)]
        public string FullName { get; set; }
    }
}

这是Context类:

namespace Zza.Data
{
    public class ZzaDbContext : DbContext
    {
        public DbSet<Customer> Customers { get; set; }
    }
}

这是控制台类:

namespace TestEFMigration
{
    public class Program
    {
        static void Main(string[] args)
        {
            CreateDataBase();
        }

        private static void CreateDataBase()
        {
            var context = new ZzaDbContext();

            context.Database.Initialize(false);
        }
    }
}

控制台的app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
  <connectionStrings>
    <add name="ZzaDbConnectionString" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Zza;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient" />
  </connectionStrings>  
</configuration>

上下文类的app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="ZzaDbConnectionString" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Zza;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

感谢。

1 个答案:

答案 0 :(得分:0)

我减少了连接字符串。

当你使用localdb时,你可能会遇到一些针对完整sql server的参数问题(你知道吗?)

我发现的差异是:

connectionString="AttachDbFilename=|DataDirectory|\Zza.mdf;MultipleActiveResultSets=True;App=EntityFramework" 
connectionString="Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite‌​;MultiSubnetFailover=False"

所以,请尝试删除第二行上的所有选项并在顶部添加一个(AttachDbFilename可以是您要使用/创建的mdf的路径)

<add name="ZzaDbConnectionString" 
 connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Zza;Integrated Security=True;
 AttachDbFilename=|DataDirectory|\Zza.mdf;MultipleActiveResultSets=True;App=EntityFramework;"
 providerName="System.Data.SqlClient" />

编辑:Ceck this

public class ZzaDbContext: DbContext
{
  public ZzaDbContext()
        : this("ZzaDbConnectionString") 
    {
    }
    // ...