簡體   English   中英

EF Core:檢測表重命名

[英]EF Core: detect table renaming

我必須通過添加基類來更改實體。 以前,我有這個:

public virtual DbSet<EmailRequest> RefundEmailRequests { get; set; }
public virtual DbSet<EmailRequestState> EmailRequestHistory { get; set; }

並更改為:

public virtual DbSet<Request> Requests { get; set; }
public virtual DbSet<RequestState> RequestHistory { get; set; }

建造者:

private void ConfigureRequest(EntityTypeBuilder<Request> builder)
{
    builder.ToTable("Requests");

    builder.HasKey(s => s.Id);

    builder.HasMany(s => s.History)
        .WithOne()
        .HasForeignKey("RequestId")
        .OnDelete(DeleteBehavior.Cascade);

    builder.HasDiscriminator<string>("Type")
        .HasValue<EmailRequest>(EmailRequest.Type)
        .HasValue<ExternalRequest>(ExternalRequest.Type);

    builder.Ignore(e => e.CurrentState);
}

private void ConfigureRequestState(EntityTypeBuilder<RequestState> builder)
{
    builder.ToTable("RequestStates");

    builder.Property<int>("Id")
        .IsRequired();

    builder.HasKey("Id");

    builder.HasDiscriminator<string>("Type")
        .HasValue<Domain.States.Request.Received>(Domain.States.Request.Received.Type)
        .HasValue<Domain.States.Request.Processing>(Domain.States.Request.Processing.Type)
        .HasValue<Domain.States.Request.Duplicate>(Domain.States.Request.Duplicate.Type)
        .HasValue<Domain.States.Request.Rejected>(Domain.States.Request.Rejected.Type)
        .HasValue<Domain.States.Request.FailedProcessing>(Domain.States.Request.FailedProcessing.Type)
        .HasValue<Domain.States.Request.Processed>(Domain.States.Request.Processed.Type);
}

現在, EmailRequest繼承自Request (國家/地區的相同原則)

添加遷移時,我注意到EF檢測到重命名為RequestState而不是Request。

migrationBuilder.DropTable(
    name: "EmailRequests",
    schema: "refunds");

migrationBuilder.RenameTable(
    name: "EmailRequestStates",
    schema: "refunds",
    newName: "RequestStates");

怎么樣 ? 我該怎么做才能檢測到重命名?

EmailRequest現在從Request繼承

您不能將表重命名為現有表。 您需要復制已刪除的數據:

migrationBuilder.Sql(
@"
    INSERT INTO Requests
    SELECT * FROM refunds.EmailRequests;
");

migrationBuilder.DropTable(
    name: "EmailRequests",
    schema: "refunds");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM