Azure 管道 SQL 迁移 Ef 核心对象存在问题

Azure pipeline SQL Migration Ef Core Object exist issue

提问人:A Coder 提问时间:11/15/2023 最后编辑:A Coder 更新时间:11/17/2023 访问量:128

问:

赏金将于明天到期。这个问题的答案有资格获得 +50 声望赏金。编码员正在寻找来自信誉良好的来源的答案
需要一个工作版本,这样我就可以从我这边测试它。

我正在使用 ,通过管道在 Azure 应用服务中部署我的应用程序和数据库。.NET Core 6EF Core Code first

使用管道任务生成文件并使用发布管道将其部署到数据库中。SQL Migration.sql

现在,迁移文件是使用脚本生成的,并且也会进行部署。这里的问题是,当我更改模型文件(任何列更改,如或更改)并再次部署它时,使用脚本生成相同的文件,并且在部署期间它说.CREATE TABLEAddDeleteMaxLengthCREATE TABLETABLE NAME xyz already EXISTS

我期待类似任务做什么,验证和处理自己。或者有没有办法从迁移中生成文件。DACPACDACPAC

有人可以帮忙吗?

SQL迁移任务:

migrations add DbMigration --project $(Build.SourcesDirectory)\NotificationService.App/NotificationService.App.csproj

创建脚本任务:

migrations script  --idempotent --output $(Build.SourcesDirectory)/SQL/migrations.sql --project $(Build.SourcesDirectory)\NotificationService.App/NotificationService.App.csproj --context NotificationDbContext

SQL 部署:

在发布管道中使用带有 as 的任务发生。Azure Sql Database DeplpymentDeploy TypeSql Script File

Deployment Task in Release pipeline

程序.cs:

builder.Services.AddDbContext<NotificationDbContext>(options => {
    options.UseSqlServer(ConnectionStringValue.Value,
        sqlServerOptionsAction: sqlOptions => {
            sqlOptions.MigrationsHistoryTable("EFMigrationHistory", "dbo");
            sqlOptions.MigrationsAssembly(typeof(NotificationDbContext).Assembly.GetName().Name);
            sqlOptions.EnableRetryOnFailure(maxRetryCount: 15, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null);
        });
}, ServiceLifetime.Scoped);

DbContext:

public class NotificationDbContext : DbContext
 {
     public NotificationDbContext(DbContextOptions<NotificationDbContext> options)
         : base(options)
     {
     
     }

     public DbSet<Notification> Notification { get; set; }

     protected override void OnModelCreating(ModelBuilder modelBuilder)
     {

         base.OnModelCreating(modelBuilder);
     }

 }

 public class MyDbContextFactory : IDesignTimeDbContextFactory<NotificationDbContext>
 {
     public NotificationDbContext CreateDbContext(string[] args)
     {
         var optionsBuilder = new DbContextOptionsBuilder<NotificationDbContext>();
         optionsBuilder.UseSqlServer("ConnectionString..."
             , options => {
                 options.MigrationsHistoryTable("EFMigrationHistory", "dbo");
             });

         return new NotificationDbContext(optionsBuilder.Options);
     }
    
 }

错误:

Error message in deployment

C# Azure azure-pipelines 实体框架迁移

评论

0赞 Kevin Lu-MSFT 11/15/2023
如何在 Release Pipeline 中部署 sql 文件?中方能否介绍有关情况?
0赞 A Coder 11/16/2023
@KevinLu-MSFT 部署在发布管道中使用 as 的任务。Azure Sql Database DeplpymentDeploy TypeSql Script File
0赞 CrazyPyro 11/19/2023
要获取更多详细信息,该链接建议“在”变量“选项卡上,添加并将其设置为 ”。system.debugtrue
0赞 A Coder 11/19/2023
@CrazyPyro我清楚地知道问题出在哪里,这里还有什么要调试的吗?

答: 暂无答案