【问题标题】:EntityFramework not creating tablesEntityFramework 不创建表
【发布时间】:2012-04-16 16:13:09
【问题描述】:

我使用 EF 已经有一段时间了,一直使用Model-First 方法。现在我正在Code-First 土地上冒险。 问题是:我在自动创建表时遇到了问题。

根据某些网站,这是可能的。我已经尝试了他们的方法,但没有成功。

这是我尝试过的方法之一:Database.CreateIfNotExists()

运气不好……

我的连接字符串很完美并且可以正常工作。如果我手动添加表格,它确实有效。问题是当我没有创建表时。它只是没有像我所说的那样创造。

我的班级装饰正确。 (再次:当我创建数据库时它正在工作)

有什么建议吗?这个功能真的有用吗?

我正在使用:

Visual Studio 2010 专业版

EntityFramework 4.3.1(虽然我也尝试过 4.1)

SQL Server 2008 R2

提前致谢。

【问题讨论】:

  • 您是否创建了自己的从 DbContext 派生的上下文类?然后进行调用,在上下文中使用 DbSet Entities
  • Database.CreateIfNotExists() 只会在数据库本身不存在时导致 EF 创建表(在这种情况下它会创建数据库和表)。如果数据库存在但表恰好丢失,它不会导致它自动创建表。这可能是您遇到的问题吗?
  • @Sergey 是的,我做到了。
  • @JohnW 没错,当我尝试这种方法时,数据库已经存在。有没有办法使用现有的数据库?我想要创建/删除/更新的唯一东西是表格。谢谢。
  • 我不相信有内置的System.Data.Entity.IDatabaseInitializer<TContext> 可以做到这一点。大多数人似乎在做任何事情之前就删除了整个数据库。如果您希望事情自动完成,但建议是使用 MigrateDatabaseToLatestVersion 初始化程序。

标签: c# entity-framework-4 ef-code-first code-first entity-framework-migrations


【解决方案1】:

实体框架中包含三个数据库初始化器,它们都实现了IDatabaseInitializer<Context> 接口。他们是:

  • CreateDatabaseIfNotExist(默认)
  • DropCreateDatabaseWhenModelChanges
  • DropCreateDatabaseAlways

如您所见,默认 API 没有创建表的初始化程序,而是创建整个数据库。但是,人们还创建了其他初始化程序,其中有一个可以完成您想要的完全相同的事情。

在 Nuget 包中EFCodeFirst.CreateTablesOnly

如果您确实需要,另一种选择是创建自己的初始化程序。

【讨论】:

  • 感谢您的回答。今晚晚些时候,我将尝试这样做,并通过接受答案让你知道它是如何进行的。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多