更改连接字符串名称会导致DataReader打开错误

时间:2018-08-15 09:25:53

标签: asp.net-mvc connection-string

我是MVC的新手,只是构建了要用于测试服务器的第一个应用程序。但是,我遇到了一个关于我坚持使用的连接字符串名称的奇怪问题,希望有人可以帮助我。这是问题所在:

我有一个看起来像这样的DBContext类:

using NVD.Models;
using System.Data.Entity;
namespace NVD.DAL
{
    public class NVDContext : DbContext
    {
        public DbSet<Patient> Patients { get; set; }
        public DbSet<Conscent> Conscents { get; set; }
        ... some more DBSets here ...
    }
}

在编写应用程序代码时,我使用了如下所示的连接字符串:

<add name="NVD" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\tnie0118\Documents\Visual Studio 2017\Projects\NVD\NVD\App_Data\NVD.DAL.NVDContext.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />

我已阅读到连接字符串名称必须与DBContext类的名称匹配,我认为我的情况是NVDContext。但是,在LocalHost上运行时,一切运行良好,如果将连接字符串名称更改为“ NVDContext”,则每次尝试使用延迟加载时都会收到错误消息:

  

已经有与此命令关联的打开的DataReader   必须先关闭它。”我可以通过添加来消除错误   “ .ToList()

无处不在,但这将是大量工作,我相信问题确实是另外一回事。

然后,我想就可以保留名称了。但是,现在我必须将数据库移至SQL服务器,并且为了使我的应用程序在SQL服务器上使用数据库,我具有以下连接字符串:

<add name="NVDContext" connectionString="Data Source=SERVERNAME\SERVERNAME;Integrated Security=False;User ID=xxxx;Password=xxxx; Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient"/>

因此,如果我使用“ NVDContext”名称,则该应用程序将仅连接到SQL服务器中的数据库,但这会给我打开数据读取器错误,并且如果我尝试使用“ NVD”作为连接字符串名称该应用程序尝试连接到C驱动器上的本地数据库(即使我注释掉了本地连接字符串)。

所以我真的很茫然。希望有人可以帮助我。预先感谢一百万。 /角色

1 个答案:

答案 0 :(得分:0)

一旦从数据库中检索到数据,就关闭DataReader,对每个事务使用连接打开和关闭。