EF 6 Code-First不创建一个表

时间:2015-07-14 13:23:29

标签: c# ef-code-first entity-framework-6

我有点不熟悉EF Code-first来创建一个新的数据库。我们有一个现有的数据库,并成功使用了Model-First方法。现在我希望现有模型在运行时创建一个新数据库,如下所示:

public class DatabaseInitializer : IDatabaseInitializer<MDREntities>
{    
    public void InitializeDatabase(MDREntities dbContext)
    {
        if (dbContext.Database.Exists())
        {
            // Delete the existing database
            dbContext.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, "ALTER DATABASE [" + dbContext.Database.Connection.Database + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
            dbContext.Database.Delete();
        }
        // Create new database
        dbContext.Database.Create();

        // Add initial data
        addMasterData(dbContext);

        // Commit changes.
        dbContext.SaveChanges();
    }
}

以上内容成功完成,除了1 以外,我的所有表格都已创建。

我没有运气就做了以下事情:

  • 表格确实存在于edmx模型中。
  • 模型.tt文件确实为表生成了类。
  • 上下文.tt文件确实为表生成DbSet。
  • 我删除了我的edmx模型,并从数据库中重新创建。

是否有可能“追踪”dbContext.Database.Create();做了什么以及事情确实出错?

我还注意到“缺失”表是唯一一个带有复合PK 的表,这可能是个问题吗?

更新

当我查看SQL Profiler时,我发现此评论说该表被忽略。不幸的是,它没有说明原因:

-- Ignoring entity set with defining query: [MDRModelStoreContainer].[tblRelatedPatient]

这是在edmx中映射的表:

enter image description here

1 个答案:

答案 0 :(得分:0)

原始表没有主键

即使edmx在设计器中显示Composite Primary Key,在我实际更新原始数据库并刷新edmx之前,表格也没有从edmx模型成功创建,奇怪......

  • 向基础表添加PK(原始映射到edmx)
  • 刷新edmx模型
  • 现在dbContext.Database.Create();成功创建了表格。