我有点不熟悉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 以外,我的所有表格都已创建。
我没有运气就做了以下事情:
是否有可能“追踪”dbContext.Database.Create();
做了什么以及事情确实出错?
我还注意到“缺失”表是唯一一个带有复合PK 的表,这可能是个问题吗?
更新
当我查看SQL Profiler
时,我发现此评论说该表被忽略。不幸的是,它没有说明原因:
-- Ignoring entity set with defining query: [MDRModelStoreContainer].[tblRelatedPatient]
这是在edmx中映射的表:
答案 0 :(得分:0)
原始表没有主键。
即使edmx在设计器中显示Composite Primary Key
,在我实际更新原始数据库并刷新edmx之前,表格也没有从edmx模型成功创建,奇怪......
dbContext.Database.Create();
成功创建了表格。