将Entity Framework与现有数据库一起使用。防止表删除?

时间:2016-06-01 07:30:27

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

我将旧网站的论坛更新为开源MVCForum。 MVCForum使用Code First Entity Framework,据我所知,它与现有数据库集成很困难(至少像我这样的初学者:/)。我从头开始简单地使用实体框架,但从未在已经设计的应用程序中完成模型。

有没有办法将Code First EF项目所需的表集成到数据库中,而不删除所有与该项目没有直接关联的表?将所有网站的表放在一个数据库而不仅仅是论坛中。桌子是理想的。

此外,有没有办法通过Entity Framework强制更新数据库?只是一个蛮力"检查这些表是否存在,如果没有创建它们。"我遇到了EF的问题,认为我的数据库有必要的表格(我认为这就是问题......)而且它没有。

道歉,如果这没有意义。我甚至不太了解EF足以正确地提出有关它的问题。

由于

2 个答案:

答案 0 :(得分:0)

是的,如果Model中的DbSet名称是唯一的(与DB表名相对),EF只需创建__MigrationHistory表并添加与您的EF模型对应的新表。这是CreateDatabaseIfNotExists初始值设定项的默认行为。

在你的情况下你不应该使用

  • DropCreateDatabaseWhenModelChanges
  • DropCreateDatabaseAlways

因为此初始化程序将删除数据库。

逆向工程

您可以选择在DB中创建新表,然后以常用方式使用EF代码。在这种情况下,EF不会更改您的数据库。请注意,在这种情况下,您必须手动在数据库中进行所有更改。

答案 1 :(得分:0)

该项目看起来准备好迁移,所以您需要做的就是将连接字符串指向您想要的位置。首次运行时,它将创建数据库,因此您现在要创建一个基线迁移,以获取现有模式的快照:

1) add-migration Initial -IgnoreChanges  // tells EF tables exist
2) update-database  // Adds record to __MigrationHistory table

现在,您可以进行自己的更改,并按照常规代码的第一个工作流程进行操作:

1) Change schema
2) add-migration foo
3) update-database