Я пытаюсь создать очень простое отношение «один ко многим» со свойством навигации.По умолчанию все работает нормально, но когда я пытаюсь установить 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, этого не следует делать.Что я делаю не так?
Спасибо.