SQL Server 在代码优先环境中从软件包管理器控制台更新数据库

ijnw1ujt  于 2023-01-25  发布在  其他
关注(0)|答案(5)|浏览(150)

代码优先环境

我正在尝试从软件包管理器控制台更新数据库。如果我的域类发生变化,我必须删除并创建数据库。除了删除数据库,我如何更新数据库?

命令

1.通过使用这个命令,我成功地安装了实体框架。

PM> Install-Package EntityFramework

1.通过使用此命令,它在我的项目中创建了迁移文件。

PM> Enable-Migrations

1.通过使用此命令,我可以更新表,但我有一个问题在这里

PM> Update-Database

错误

指定“-Verbose”标志以查看正在应用于目标数据库的SQL语句。System.Data.SqlClient.SqlException(0x 80131904):建立与SQL Server的连接时出现与网络相关的或特定于示例的错误。找不到服务器或服务器不可访问。请验证示例名称是否正确,以及SQL Server是否配置为允许远程连接。
∮怀疑就在眼前∮
有时,如果POCO类中只有一个字段更改,它可能会更新。例如,我更新了域类more number。如何从软件包管理器控制台更新数据库?

ztmd8pv5

ztmd8pv51#

可以通过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
7cwmlq89

7cwmlq892#

我以前
Enable-Migrations -EnableAutomaticMigrations -Force
那么
Update-Database
这在保留测试数据的同时迁移了我的更改(附加列)。我认为这是原型化时最懒惰的选择。

zi8p0yeb

zi8p0yeb3#

您似乎遇到了多个问题。关于是否要删除并重新创建数据库,这取决于您的数据库初始值设定项。如果要使用迁移,请将其更改为MigrateDatabaseToLatestVersion. http://www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm
第二,不管您更改了多少字段,它们都会根据上次迁移的更改滚入单个迁移。
第三,正如其他人所指出的,你似乎有一个连接字符串的问题。虽然你可以添加到Add-Migration和Update-Migration我可能会修复它在应用程序中。我设置我的在我的上下文的构造函数指向我的配置文件(web.config为ASP.NET)。

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
        : base("MyConnection", throwIfV1Schema: false)
    {
        Database.SetInitializer<ApplicationDbContext>(new MigrateDatabaseToLatestVersion<ApplicationDbContext, MyObjextContextMigration>());
    }
    ...
tct7dpnv

tct7dpnv4#

连接字符串应放在何处?
您不需要在包管理器控制台中的每个命令中都指定它。您可以将它放在DbContext类(读取“from DbContext derived class”)所在项目的appsettings.json中。

{
  "ConnectionStrings": {
    "MyConnectionString": "Server=yourServer;Port=5432;Database=yourDatabase;User Id=yourDatabaseUsername;Password=yourDatabasePassword;"
  }
}

它将用于迁移。
重要:如果您的解决方案中有多个项目,您必须在“Default project”下拉列表中选择项目(在包管理器控制台中),并且您必须将项目设置为启动项目(在解决方案资源管理器中)。
如果不这样做,可能会导致错误的appsettings.json与不正确/不同的connectionstring一起使用。
这是我使用EF Core 2.1的经验,可能也适用于EF的其他版本。

ubby3x7f

ubby3x7f5#

您需要更新SSDT转到工具〉扩展和更新〉更新〉SQL Server数据工具

相关问题