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

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

作者: 显卡84du | 来源:发表于2017-08-02 15:36 被阅读11次

    本文写于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 的问题,在调试结束第二次启用时,需要重新清理生成,要不数据库连接可能无法释放,造成无法连接。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/nzxylxtx.html