在Visual Studio中调试时发生了一件非常奇怪的事情。
我在Web.config中定义了一个本地数据库...
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\cms_test_data;Initial Catalog=cms_test_data;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
当我调试项目时,DbSet对象为空。例如,Pages(见下文)在页面控制器操作中的断点处返回Count of 0。
但是当我检查服务器资源管理器中的表时,它们会填充测试数据。
以下是我的数据库上下文的定义方式......
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Page> Pages { get; set; }
...
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
...
}
更奇怪的是,当我使用外部数据库时,一切正常。
有什么想法吗?感谢。
答案 0 :(得分:0)
看来我的connectionString包含 AttachDbFilename = | DataDirectory | \ cms_test_data 而不是 AttachDbFilename = | DataDirectory | \ cms_test_data.mdf ,实际上App_Data文件夹中有一个文件叫做cms_test_data(没有文件扩展名)。
似乎SQL Server不关心数据库文件是否有扩展名,更不用说“.mdf”扩展名了。请参阅What is an MDF file?。
因此,当 cmd_test_data 放入连接字符串而不是 cmd_test_data.mdf 时,会创建一个具有此名称的空白数据库,以及现有的.mdf文件。