.NET Core 5.0 EF Migration 添加新的外部列

Posted

技术标签:

【中文标题】.NET Core 5.0 EF Migration 添加新的外部列【英文标题】:.NET Core 5.0 EF Migration add new foreign column 【发布时间】:2021-12-16 12:54:55 【问题描述】:

我有一个带有 .net core Entity Framework 代码的应用程序。

我有 2 个关系表。 altKategori 和 anaKategori

alt类别

public class altKategori

    [Key]
    public int idAltKategori  get; set; 

    [Column(TypeName = "Varchar")]
    [StringLength(30)]
    public string adAltKategori  get; set; 

    public int idAnaKategori  get; set; 
    public anaKategori anaKategori  get; set; 

类目

public class anaKategori

    [Key]
    public int idAnaKategori  get; set; 

    [Column(TypeName = "Varchar")]
    [StringLength(30)]
    public string adAnaKategori  get; set; 

    public List<altKategori> altKategoris  get; set; 

还有我的上下文:

public class Context : DbContext

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    
        optionsBuilder.UseSqlServer("server=.\\MSSQLSERVER2019;database=deneme;User ID=deneme1;Password=****;");
    
    public DbSet<altKategori> altKategoris  get; set; 
    public DbSet<anaKategori> anaKategoris  get; set; 

当我开始迁移时,迁移会自动添加 anaKategoriidAnaKategori 列,并添加与该列的关系。

migrationBuilder.CreateTable(
            name: "altKategoris",
            columns: table => new
            
                idAltKategori = table.Column<int>(type: "int", nullable: false)
                    .Annotation("SqlServer:Identity", "1, 1"),
                adAltKategori = table.Column<string>(type: "Varchar(30)", maxLength: 30, nullable: true),
                idAnaKategori = table.Column<int>(type: "int", nullable: false),
                anaKategoriidAnaKategori = table.Column<int>(type: "int", nullable: true)
            ,
            constraints: table =>
            
                table.PrimaryKey("PK_altKategoris", x => x.idAltKategori);
                table.ForeignKey(
                    name: "FK_altKategoris_anaKategoris_anaKategoriidAnaKategori",
                    column: x => x.anaKategoriidAnaKategori,
                    principalTable: "anaKategoris",
                    principalColumn: "idAnaKategori",
                    onDelete: ReferentialAction.Restrict);
            );

我不想与 anaKategoriidAnaKategori 建立关系。我想与 idAnaKategori 建立关系。我怎样才能? 感谢您的帮助。

【问题讨论】:

我认为 EF Core 会假定某些属性是主键或外键 if it ends with Id。因此,在您的情况下,请尝试重命名您的密钥或在 DbContext 中的 OnModelCreating 方法中配置关系。 【参考方案1】:

尝试添加关系属性

public class altKategori

    [Key]
    public int idAltKategori  get; set; 

    [Column(TypeName = "Varchar")]
    [StringLength(30)]
    public string adAltKategori  get; set; 

    public int idAnaKategori  get; set; 

    [ForeignKey(nameof(idAnaKategori ))]
    [InverseProperty("altKategoris")]
    public anaKategori anaKategori  get; set; 


public class anaKategori

    [Key]
    public int idAnaKategori  get; set; 

    [Column(TypeName = "Varchar")]
    [StringLength(30)]
    public string adAnaKategori  get; set; 

   [InverseProperty(nameof(altKategori.anaKategori))]
    public List<altKategori> altKategoris  get; set; 

【讨论】:

以上是关于.NET Core 5.0 EF Migration 添加新的外部列的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 5.0 - 更新 ASP.NET Core Web API 中的多对多实体

EF Core 5.0 添加多对多使得一对多无法确定

在 EF Core 5.0 中使用 FromRawSql 会引发异常

EF Core 5.0 - 更改“定义查询”映射实体时是不是需要生成迁移?

EF Core (< 5.0) HasComputedColumnSql - 在插入/更新或 SQL Server/AzureSQL 上的每个查询上计算?

ef core一直报Sequence contains more than one matching element