【问题标题】:Adding new model to existing ones using Code First使用 Code First 向现有模型添加新模型
【发布时间】:2017-01-08 17:39:05
【问题描述】:

目前我实现了如下。

问题:为了保持现有表中的数据完好无损,这是正确的方法吗?我觉得我在做这件事相当啰嗦。有什么建议或替代/正确的做法吗?

  1. myProjectContext.cs 文件中创建新实体(模型)和对应的DbSet<...> 条目
  2. 从 VS2015 中删除现有迁移并从 SQL Server Db 中删除相应的__EFMigrationsHistory
  3. 运行PM> add-migration mytMigration -context myProjectContext
  4. 注释掉新生成的mytMigration.cs文件中的所有代码,除了与新生成的实体(模型)相关的代码。
  5. 运行PM> update-database -context myProjectContext

新表(对应于新添加的实体)与新的__EFMigrationsHistory 表一起在现有数据库中创建。所有现有表中的数据保持完好。

更新:

我正在关注official ASP.NET tutorial 并且 - 根据他们的建议 - 已使用依赖注入注册了我们的上下文,如下所示:

Startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            var connection = @"Server=myDevMachine\SQL2012Instance;Database=myDb;Trusted_Connection=True;";
            services.AddDbContext<ABCTestContext>(options => options.UseSqlServer(connection));
...
...
}

【问题讨论】:

    标签: visual-studio-2015 asp.net-core ef-code-first entity-framework-core


    【解决方案1】:

    您不应删除现有的任何内容。你加对了吗?

    你应该做的步骤:

    1. 创建新实体
    2. 将 DbSet 添加到上下文中
    3. 运行添加迁移 新迁移名称
    4. 运行更新数据库

    Add-Migration 查看现有数据库和模型并生成迁移以更新架构。

    当您运行 Update-Database 时,EF 会检查迁移历史记录表并运行尚未执行的迁移。

    【讨论】:

    • @junnas 但是运行add-migration 将为所有现有表创建Create Table... 脚本(因为它们在模型文件中 - 然后update-database 将尝试重新创建那些现有表。
    • Add-migration 应该查看当前模型中发生了什么变化并生成迁移以更新数据库模式。如果您不触摸迁移历史记录表或现有迁移,这是它应该执行的操作。
    • @junnas 在add-migration 中,我必须提供迁移的名称 - 如果名称相同,则会抱怨the name 'myFirstMigration' is used by an existing migration。如果我使用不同的名称,它将在迁移历史记录表中创建一个新的迁移和一个与这个新迁移相关的新条目。然后,update-migration 将运行新的迁移,然后会抱怨table so and so already exists etc...
    • 那么你的设置肯定有问题。但我猜不出它可能是什么。您是否完成了本教程:docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db?你可以检查一下,看看你有什么不同。
    • 你提到的教程正是我遵循的那个。我刚刚在上面的帖子中添加了 UPDATE 部分来回答您的询问。我想您可能指的是教程中的第二个TIP 部分(以绿色显示)。如提示中所述,可以创建新的迁移。 问题update-database 命令如何知道要使用哪个迁移(新迁移还是旧迁移)?
    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多