DbSets在MVC5 EF Code First Project中显示为空,但DB显示在服务器资源管理器中

时间:2017-02-26 23:58:57

标签: sql-server asp.net-mvc

在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)
    {
    }
    ...
}

更奇怪的是,当我使用外部数据库时,一切正常。

有什么想法吗?感谢。

1 个答案:

答案 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文件。