Индекс дублируется с базовым отношением «один ко многим» Entity Framework - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь создать очень простое отношение «один ко многим» со свойством навигации.По умолчанию все работает нормально, но когда я пытаюсь установить SetNull на Delete, я получаю другой индекс, называемый «InvoiceID1» для ICollection.

Entity Framework 2.2

Entities

public class BaseEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }
}

public class Invoice: BaseEntity
{
    [Display(Name = "Invoice Number")]
    public string Number { get; set; }

    [Display(Name = "Amount")]
    [DataType(DataType.Currency)]
    public decimal Amount { get; set; }

    public ICollection<InvoiceLine> InvoiceLine { get; set; }
}

public class InvoiceLine: BaseEntity
{
    [Display(Name = "Invoice")]

    [ForeignKey("Invoice")]
    public int? InvoiceID { get; set; }
    public Invoice Invoice { get; set; }

    public string ItemName { get; set; }
}
[...]
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Invoice>().ToTable("Invoice");
    modelBuilder.Entity<InvoiceLine>().ToTable("InvoiceLines");
}        

Изменение части для SetNull при удалении

        modelBuilder.Entity<Invoice>().ToTable("Invoice");
        modelBuilder.Entity<Invoice>().HasMany(i => i.InvoiceLine).WithOne("Invoice").OnDelete(DeleteBehavior.SetNull);

        modelBuilder.Entity<InvoiceLine>().ToTable("InvoiceLines");
        modelBuilder.Entity<InvoiceLine>().HasOne(i => i.Invoice).WithMany().OnDelete(DeleteBehavior.SetNull);

(я пробовал только с одним HasOne () или HasMany () тоже с теми же результатами) Вывод Add-Migration WITH DUPLICATE FK:

            migrationBuilder.CreateTable(
            name: "InvoiceLines",
            columns: table => new
            {
                ID = table.Column<int>(nullable: false)
                    .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
                Visible = table.Column<bool>(nullable: false),
                InvoiceID = table.Column<int>(nullable: true),
                ItemName = table.Column<string>(nullable: true),
                InvoiceID1 = table.Column<int>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_InvoiceLines", x => x.ID);
                table.ForeignKey(
                    name: "FK_InvoiceLines_Invoice_InvoiceID",
                    column: x => x.InvoiceID,
                    principalTable: "Invoice",
                    principalColumn: "ID",
                    onDelete: ReferentialAction.SetNull);
                table.ForeignKey(
                    name: "FK_InvoiceLines_Invoice_InvoiceID1",
                    column: x => x.InvoiceID1,
                    principalTable: "Invoice",
                    principalColumn: "ID",
                    onDelete: ReferentialAction.Restrict);
            });

Согласно документации и примерам Microsoft, этого не следует делать.Что я делаю не так?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...