实体框架导航属性自定义命名



当使用实体框架(代码优先(在两个实体之间建立连接时,我发现很难处理属性的命名。

在下面的代码示例中,它将找不到正确的连接,并将请求一个名为airline_iata_airline_code的列,该列不存在,因此即使我设置了外键属性(为其提供了相关类的类名(并定义了要在其他类中查找的列名,它也会失败。

[ForeignKey("AirlineDto")]
[Column("iata_airline_code")]
public string IataAirlineCode { get; set; }

这不起作用,但如果我将其更改为以下示例,它会找到关系并从数据库中返回正确的数据(而不是名称更改(。

[ForeignKey("AirlineDto")]
[Column("iata_airline_code")]
public string AirlineIataAirlineCode { get; set; }

问题是我不希望它被称为<RelatedClass><PrimaryKey>。我希望能够定义我自己的名字。如何做到这一点?

您没有指定是否使用"代码优先",而是在DBConext类上尝试以下操作:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<YourClassName>().Property(x => x.IataAirlineCode).HasColumnName("iata_airline_code");
}

我在本指南中找到了一个解决方案:https://www.c-sharpcorner.com/article/navigation-property-with-code-first-navigation-property-in-ef/

由于我无法通过向变量添加外键属性来实现自定义命名,我更改了方法,并将其添加到导航属性中。两种方法都在现场进行了解释。

工作样本如下:

// Relations
public string IataAirlineCode { get; set; }
// Navigation
[ForeignKey("IataAirlineCode")]
public AirlineDto Airline { get; set; }

最新更新