使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段
Posted
技术标签:
【中文标题】使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段【英文标题】:SQL Server connection throw exception when using Entity Framework migration - add code snippet 【发布时间】:2016-07-14 01:35:42 【问题描述】:我有一个简单的 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" />
我从 SQL Server ObjectExplorer 的数据库的“连接字符串”属性中复制了连接字符串,所以我认为它很好。
有什么建议为什么它总是抛出这个异常?
我添加了实体类、上下文类和控制台类,希望这能澄清我的问题。
这是实体类。
namespace Zza.Entities
public class Customer
public Guid Id get; set;
[MaxLength(50)]
public string FullName get; set;
这是上下文类:
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>
谢谢。
【问题讨论】:
这里是连接字符串: 你的 sql 中有凭据吗? 如果你有一个 .mdf 或 .sdf 文件,你可以把它的名字放在你的连接字符串中,试着用谷歌搜索一些连接字符串可能会解决问题 @Desperado,db 使用 windows 嵌入式身份验证。我需要在连接字符串中放入什么凭据? @Saeid:不。我没有 .mdf 或 .sdf 文件。 【参考方案1】:我减少了连接字符串。
当您使用 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" />
编辑:检查一下
public class ZzaDbContext: DbContext
public ZzaDbContext()
: this("ZzaDbConnectionString")
// ...
【讨论】:
感谢您的建议。我的新发现是我可以使用 -ConnectionStringName 选项运行代码库迁移并将“ZzaDbConnectionString”分配给它并且它可以工作。但是如果我尝试直接运行代码,我仍然会得到同样的异常。 我可以看看您的上下文类声明以及您如何创建实例吗?也许问题与您的 dbcontext 无法识别连接字符串有关 命名空间 Zza.Data public class ZzaDbContext : DbContext public DbSet以上是关于使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段的主要内容,如果未能解决你的问题,请参考以下文章
具有 SQL Server 连接的实体框架 6 尝试使用 MySqlClient 并崩溃
在 Visual Studio 中使用实体框架与 SQL Server 的连接问题
如何更改实体框架项目以使用 Microsoft SQL Server
在实体框架代码优先中,为啥我不能在连接字符串中使用 SQL Server Express?