在 EF 中,添加迁移是由 class 更改触发的还是由上下文接口触发的?

In EF are add-migrations triggered by class changes or by the context interface?

MVC5,EF 6.0 代码优先,SQL

我有一个使用 SQL 数据库的远程托管 MVC5 网站。 我的 objective 是 轻松编码以将托管数据库中的某些记录或 copy/delete 复制或 copy/delete 到本地数据库。因此,我向我的开发项目添加了一个额外的上下文,如图所示。

Public Class WebDbContext
  Inherits DbContext

  Public Sub New()
    MyBase.New("name=WebDbConnection")
    Me.Configuration.LazyLoadingEnabled = True
  End Sub

  Public Shared Function Create() As WebDbContext
    Return New WebDbContext()
  End Function

  Public Property table1 As DbSet(Of Class1)
  .
  .
  Public Property tableN As DbSet(Of ClassN)
End Class

and in web.config I added the connection string

<configuration>
  .
  .
  <connectionStrings>
    <add name="WebDbConnection" connectionString="Data Source=<ip>;Initial Catalog=<dbname>;User ID=<id>;Password=<pwd>;" providerName="System.Data.SqlClient" />
  </connectionStrings>
  .
  .

这个新上下文允许我从开发项目访问和操作网站数据库。我显然需要为要在本地保存的数据库提供另一个上下文,但我才刚刚开始使用它。我朝这个方向开始,因为新上下文的 Class 定义将始终与托管数据库保持同步,因为开发项目源自托管数据库中的 Class 定义。有没有更好的方法来编码对远程数据库的访问?

但我真正的问题是:当我进行下一次添加迁移时,我对这个新的 WebDbContext 有何期待?是每个上下文都创建了一个 EF 添加迁移要求,还是只是 Class 定义创建了添加迁移要求并且其他上下文不会有问题?

关于从开发项目访问生产数据库,我知道我们对待生产数据库的方式不同,但该项目处于早期开发阶段,正在寻求快速的编程解决方案。我了解到稍后在生产过程中可能需要不同的解决方案。

或者,当然,通常情况下,如果有一种完全不同且普遍接受的方式来完成我一开始所说的 objective,那可能是什么?

不太确定我是否完全理解你的问题,但如果我明白了你的问题的要点,你试图拥有 2 个数据库(1 个本地数据库 + 1 个 SQL 服务器托管)并且想知道如何设置数据迁移。

首先,您需要 2 个 connectionString,1 个用于本地,1 个用于 SQL

然后在您的包管理器控制台中,您需要运行命令:

enable-migrations
add-migration -Name firstDbMigrationScript -ConnectionStringName firstConnnectionString
add-migration -Name secondDbMigrationScript -ConnectionStringName secondConnnectionString

抱歉,如果这些东西不能正常工作,我正在凭记忆编码