EF 6 Code-First 不创建 table
EF 6 Code-First not creating one table
我对使用 EF Code-first 来创建新数据库有点不适应。我们有一个现有的数据库并成功地使用了模型优先方法。现在我想现有模型在 运行-time 像这样创建一个新数据库:
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();
}
}
以上 运行 已成功创建,我的 table 已创建,除了 1。
我已经完成了以下操作但没有任何运气:
- edmx 模型中确实存在 table。
- 模型 .tt 文件确实为 table 生成了 class。
- 上下文 .tt 文件确实为 table.
生成了一个 DbSet
- 我删除了我的 edmx 模型并从数据库中重新创建。
是否有可能 "trace" dbContext.Database.Create();
做了什么,如果确实出了问题?
我也注意到 "missing" table 是唯一一个 复合 PK,这会是个问题吗?
更新:
当我查看 SQL Profiler
时,我发现这条评论说 table 被忽略了。不幸的是它没有说明原因:
-- Ignoring entity set with defining query: [MDRModelStoreContainer].[tblRelatedPatient]
这是在 edmx 中映射的 table:
原来的table没有主键。
即使 edmx 在设计器中显示 Composite Primary Key
,但直到我实际更新原始数据库并刷新 edmx 后,table 才从 edmx 模型成功创建,奇怪.. .
- 向底层添加 PK table(原始映射到 edmx)
- 刷新 edmx 模型
- 现在
dbContext.Database.Create();
创建 table 成功。
我对使用 EF Code-first 来创建新数据库有点不适应。我们有一个现有的数据库并成功地使用了模型优先方法。现在我想现有模型在 运行-time 像这样创建一个新数据库:
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();
}
}
以上 运行 已成功创建,我的 table 已创建,除了 1。
我已经完成了以下操作但没有任何运气:
- edmx 模型中确实存在 table。
- 模型 .tt 文件确实为 table 生成了 class。
- 上下文 .tt 文件确实为 table. 生成了一个 DbSet
- 我删除了我的 edmx 模型并从数据库中重新创建。
是否有可能 "trace" dbContext.Database.Create();
做了什么,如果确实出了问题?
我也注意到 "missing" table 是唯一一个 复合 PK,这会是个问题吗?
更新:
当我查看 SQL Profiler
时,我发现这条评论说 table 被忽略了。不幸的是它没有说明原因:
-- Ignoring entity set with defining query: [MDRModelStoreContainer].[tblRelatedPatient]
这是在 edmx 中映射的 table:
原来的table没有主键。
即使 edmx 在设计器中显示 Composite Primary Key
,但直到我实际更新原始数据库并刷新 edmx 后,table 才从 edmx 模型成功创建,奇怪.. .
- 向底层添加 PK table(原始映射到 edmx)
- 刷新 edmx 模型
- 现在
dbContext.Database.Create();
创建 table 成功。