我是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驱动器上的本地数据库(即使我注释掉了本地连接字符串)。
所以我真的很茫然。希望有人可以帮助我。预先感谢一百万。 /角色
答案 0 :(得分:0)
一旦从数据库中检索到数据,就关闭DataReader,对每个事务使用连接打开和关闭。