【发布时间】:2014-09-06 04:24:05
【问题描述】:
我试图了解 Entity Framework 到底在做什么,导致我将要描述的观察到的行为。
这是一个 ASP.NET MVC 4 Internet 应用程序项目。
我在本地主机上有一个名为 wpdb 的现有 MSSQL 数据库。
Web.config:
<add name="DefaultConnection"
connectionString="Data Source=localhost;Initial Catalog=wpdb;User=xxx;Password=xxx"
providerName="System.Data.SqlClient" />
当我第一次运行网络应用程序时,它会自动创建dbo.UserProfile、dbo.webpages_Membership 和其他一些表格。
我创建了一个新模型Comments.cs
public class Comment
{
public int ID { get; set; }
public string Text { get; set; }
}
public class CommentDBContext : DbContext
{
public DbSet<Comment> Comments { get; set; }
}
我添加了一个新的控制器CommentsController 作为具有读/写操作和视图的MVC 控制器,使用实体框架(并选择我的“Comment”和“CommentDBContext”类)。
然后我添加了一个新的连接字符串(显然 Entity Framework 的默认连接字符串不是“DefaultConnection”,但最终是无效的,我不知道为什么)。
<add name="CommentDbContext"
connectionString="Data Source=localhost;Initial Catalog=wpdb;User=xxx;Password=xxx"
providerName="System.Data.SqlClient" />
现在,当我浏览到 localhost/Comments 时,Entity Framework 会自动在我的数据库中创建一个名为 dbo.Comments 的新表。
到目前为止我所描述的一切都完全符合预期,这就是它变得奇怪的地方
我不小心删除了dbo.Comments。但是,这一次当我浏览到localhost/Comments Entity Framework 时不会重新创建表。相反,它会向我抛出“无效对象 'dbo.Comments'”错误。
为什么要这样做?为什么不只是重新创建数据库?我什至尝试删除我所有的模型/控制器/视图代码,清理/重建解决方案,然后重新创建它,EF 仍然拒绝重新创建表!
更令人困惑的是,如果我在 Web.config 文件中注释掉 CommentDbContext 行(以便 EF 代码尝试连接到错误的数据库)然后运行应用程序并浏览到 /Comments,然后杀死应用程序,取消注释连接字符串,这次它会创建一个全新的dbo.Comments 表,没有任何问题!
为什么将连接字符串更改为无效然后将其更改回允许 EF 再次从我的模型生成表?似乎有一些状态被保存在不应该的地方..
【问题讨论】:
标签: sql-server asp.net-mvc entity-framework