我想我今天阅读了关于这个的所有内容,但似乎没有任何效果。我将 Entity Framework 5.0 与 MVC4 项目一起使用。
我有一个现有的 MVC4 项目,其中的数据库(在 SQL Server 2008 Express 上)存在一些问题,即使我的 DataContextInitializer 从 DropCreateDatabaseAlways 继承,也没有重新创建。
所以我决定从 SQL Server Management Studio 中手动删除数据库。
当我重新启动我的应用程序时,我注意到数据库从未创建或初始化。然而,connectionString 很好。
在 Application_Start() 的 Global.asax.cs 中,我尝试调用这些不同的函数:
Database.SetInitializer(new DataContextInitializer());
DataContext db = new DataContext();
db.Database.Initialize(true);
db.Database.CreateIfNotExists();
最后一行代码 (CreateIfNotExists) 引发异常,并显示“序列不包含匹配元素”,并且永远不会创建数据库。无论我怎么称呼它都是一样的(db.Database.Delete() / db.Database.Initialize(true)).. 一切都给出了相同的异常/错误。
我确信我的连接字符串之前运行良好。
我尝试更改连接字符串中的数据库名称以尝试创建具有不同名称的新数据库,但问题仍然存在。
我尝试重新启动 Visual Studio、IIS、SQL Server.. 没有办法创建这个数据库,无论我做什么,我总是得到这个“序列不包含匹配元素”。
似乎我通过外部工具删除了数据库,EF仍然认为数据库存在并且不重新创建它..某处有缓存吗?我还关闭了服务器资源管理器中的所有数据连接。
任何想法 ?
这是我的 DbContext:
public class DataContext : DbContext
{
public DataContext()
{
// Do nothing
}
public DbSet<Company> Companies { get; set; }
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
和初始化器:
public class DataContextInitializer : DropCreateDatabaseAlways<DataContext>
{
protected override void Seed(DataContext context)
{
// Some init here
}
}