【问题标题】:Ef core Creating additional column for a navigation property with Name *ID1Ef core 为名称 *ID1 的导航属性创建附加列
【发布时间】:2020-11-14 03:35:59
【问题描述】:

我正在使用 Ef core Code First 来生成数据库。但我不确定它为什么要用 *ID1 创建一个新列。

实体

public class Room : BaseEntity
{
    public string Name { get; set; }
    public string UniqueCode { get; set; }
    public int BranchId { get; set; }
    public virtual Branch Branch { get; set; }
    public CommonStatus Status { get; set; }
}

配置

public class RoomConfiguration : IEntityTypeConfiguration<Room>
{
    public void Configure(EntityTypeBuilder<Room> builder)
    {
        builder.Property(t => t.Name).IsRequired().HasMaxLength(10);
        builder.Property(t => t.UniqueCode).IsRequired().HasMaxLength(10);
        builder.HasIndex(p => p.Status);
        builder.HasOne(s => s.Branch)
            .WithMany()
            .HasForeignKey(e => e.BranchId)
            .OnDelete(DeleteBehavior.Restrict);
    }
}

迁移

migrationBuilder.CreateTable(
                name: "Room",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Name = table.Column<string>(maxLength: 10, nullable: false),
                    UniqueCode = table.Column<string>(maxLength: 10, nullable: false),
                    BranchId = table.Column<int>(nullable: false),
                    Status = table.Column<int>(nullable: false),
                    BranchId1 = table.Column<int>(nullable: true)
                }

您可以设置迁移脚本实际上具有我从未定义过的 BranchId1。这也发生在某些实体中,但不是全部。我只是想知道为什么会这样谢谢

【问题讨论】:

    标签: c# .net asp.net-core-mvc ef-code-first


    【解决方案1】:

    您尚未在.WithMany() 上指定导航属性。

    WithMany():

    将此配置为一对多关系。请注意,不带参数调用此方法将显式配置关系的这一侧以不使用导航属性,即使实体类型上存在此类属性。 如果要使用导航属性,则必须指定。

    EF 首先配置您使用 fluent API 建立的关系,然后它还为 List&lt;Rooms&gt; 创建一个关系。由于BranchId 已经用于您的流畅关系,它会创建第二个名为BranchId1 的FK。

    所以你的关系应该是:

    modelBuilder.Entity<Room>().HasOne(s => s.Branch)
        .WithMany(x => x.Rooms)
        .HasForeignKey(e => e.BranchId)
        .OnDelete(DeleteBehavior.Restrict);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 2022-01-04
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 2018-10-22
      相关资源
      最近更新 更多