我正在尝试从包管理器控制台更新数据库。如果我的域类发生更改,我必须删除并创建数据库。如何更新数据库而不是删除数据库?
通过使用此命令,我成功安装了实体框架。
PM> Install-Package EntityFramework
通过使用此命令,它在我的项目中创建了迁移文件。
PM> Enable-Migrations
通过使用此命令,我可以更新表格,但我在这里遇到问题。
PM> Update-Database
指定“-Verbose”标志以查看应用于目标数据库的 SQL 语句。 System.Data.SqlClient.SqlException (0x80131904): 与 SQL Server 建立连接时发生网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。
有时,如果POCO类中只有一个字段发生变化,它可能会更新。例如,我更新了更多数量的 Domain 类。如何从包管理器控制台更新数据库?
您可以通过
ConnectionString
参数指定连接字符串:
Update-Database -ConnectionString "data source=server_name;initial catalog=db_name;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" -ConnectionProviderName "System.Data.SqlClient" -Verbose
您还需要将此参数与
Add-Migration
命令使用相同的值:
Add-Migration Version_Name -ConnectionString "data source=server_name;initial catalog=db_name;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" -ConnectionProviderName "System.Data.SqlClient" -Verbose
我用过
Enable-Migrations -EnableAutomaticMigrations -Force
然后
Update-Database
这迁移了我的更改(附加列),同时保留了我的测试数据。我认为这是原型设计时最懒的选择。
您似乎有多个问题。关于不想删除并重新创建数据库,这是由数据库初始值设定项决定的。如果您想使用迁移,请将其更改为 MigrateDatabaseToLatestVersion。 http://www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm
其次,无论您更改多少字段,它们都会根据上次迁移的更改汇总到单个迁移中。
第三,正如其他人指出的那样,您似乎遇到了连接字符串问题。虽然您可以将其添加到 Add-Migration 和 Update-Migration 中,但我可能会在应用程序中修复它。我在上下文的构造函数中设置了我的,它指向我的配置文件(ASP.NET 的 web.config)。
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext()
: base("MyConnection", throwIfV1Schema: false)
{
Database.SetInitializer<ApplicationDbContext>(new MigrateDatabaseToLatestVersion<ApplicationDbContext, MyObjextContextMigration>());
}
...
连接字符串放在哪里?
您不需要在包管理器控制台中的每个命令中指定它。您可以将其放在 DbContext 类(读取“来自 DbContext 派生类”)所在项目的 appsettings.json 中。
{
"ConnectionStrings": {
"MyConnectionString": "Server=yourServer;Port=5432;Database=yourDatabase;User Id=yourDatabaseUsername;Password=yourDatabasePassword;"
}
}
它将用于迁移。
重要提示:如果解决方案中有多个项目,则必须在“默认项目”下拉列表中选择该项目(在包管理器控制台中),并且必须将该项目设置为启动项目(在解决方案中)探索者)。
如果不这样做,可能会导致错误的 appsettings.json 与不正确/不同的连接字符串一起使用。
这是我使用 EF Core 2.1 的经验,可能也适用于其他版本的 EF。
您需要更新SSDT 转到工具>扩展和更新>更新> SQL Server数据工具
我只是使用 update-database -Force
配置完Code First数据库后,在数据库更新过程中可能会丢失数据。对于 -Force,我们会考虑到这一点。
我的解决方案可能会帮助某人: 在“连接服务”下删除 localdb。 然后右键单击“连接服务”并单击“添加”。 选择数据库。 接下来,它将询问连接字符串名称 ConnectionStrings:默认保留名称 连接字符串值命中...提供信息并测试连接 迁移现在应该可以工作了。