使用 Identity2 时出现数据连接报错的解决方案(二)

本文写于2016年12月20日,本以为报错的问题彻底解决了,没想到重启之后还是存在问题,后来发现是连接字符串的问题。其中差异后续再补一篇。


继续昨天的工作。

昨天解决了一个连接的问题,本以为没事儿了,可惜在后面的测试中发现依旧有新的问题出现,具体的现象暂时不描述了,大致的意思就是数据库不可用。

经过一晚上的查阅,终于找到了眉目,Identity2 貌似不支持 EntityFramework 的连接方式,于是数据库的连接也是有问题的,而能正常工作的连接字符串如下:

<add name="EntityModel" connectionString="Data Source=localhost;Initial Catalog=Identity;Persist Security Info=True;User Id=sa;Password=root;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

具体原因没法深究,猜测原因应该就是 Identity2 本身的特性决定的,关于上面的数据库连接字符串的展开找到一篇文章,写得还可以,参考如下:

Code First 与 DataBase First(.edmx)的区别

另外在官方网站找到一段构造连接字符串的代码:

// Specify the provider name, server and database.
string providerName = "System.Data.SqlClient";
string serverName = ".";
string databaseName = "AdventureWorks";

// Initialize the connection string builder for the
// underlying provider.
var sqlBuilder = new SqlConnectionStringBuilder();

// Set the properties for the data source.
sqlBuilder.DataSource = serverName;
sqlBuilder.InitialCatalog = databaseName;
sqlBuilder.IntegratedSecurity = true;

// Build the SqlConnection connection string.
string providerString = sqlBuilder.ToString();

// Initialize the EntityConnectionStringBuilder.
varentityBuilder = new EntityConnectionStringBuilder();

//Set the provider name.
entityBuilder.Provider = providerName;

// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = providerString;

// Set the Metadata location.
entityBuilder.Metadata = @"res://*/AdventureWorksModel.csdl|
                           res://*/AdventureWorksModel.ssdl|
                           res://*/AdventureWorksModel.msl";
Console.WriteLine(entityBuilder.ToString());

using (var conn = new EntityConnection(entityBuilder.ToString()))
{
    conn.Open();
    Console.WriteLine("Just testing the connection.");
    conn.Close();
}

数据库又能正常工作以后,可以继续进行与原有数据的合并。在博客园找到两篇比较不错的文章,关于集成 Identity2 的内容,讲到了一些常见的点和很多人会遇到的疑问:

ASP.NET Identity 2集成到MVC5项目01
ASP.NET Identity 2集成到MVC5项目02

在对 Identity2 的 User 表与原有数据库的用户表进行一一关联时,发现无法进行操作,而且建成的 EntityFramework 关系竟然是一对多的,虽然在数据库中显示的是一对一,纠结了半天无解,只好先放着,因为基本上也不影响使用场景。然后改写了了一下注册代码,将测试数据中的用户完成了注册。中途又出现了数据库连接问题,不过这次是 VS 的问题,在调试结束第二次启用时,需要重新清理生成,要不数据库连接可能无法释放,造成无法连接。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 需要原文的可以留下邮箱我给你发,这里的文章少了很多图,懒得网上粘啦 1数据库基础 1.1数据库定义 1)数据库(D...
    极简纯粹_阅读 7,500评论 0 46
  • 心博骤停(Cardiac Arrest, CA)是指各种原因引起的、在未能预计的情况和时间内心脏突然停止搏动,从而...
    Joan_He阅读 3,753评论 5 29
  • Nodejs应用 《《一起学Koa》》 Git和Github 《《Git教程》》 ES6 《《ES6教程》》
    撑伞的鱼阅读 279评论 0 1
  • 完成图。最外面的花瓣,没处理好,只好加上了阴影。 本想画一张金色的禅陀罗的。 第三层这个睫毛还是很喜欢的 第二层没...
    M有如果阅读 596评论 8 15