Пользовательское именование свойств навигации Entity Framework - PullRequest
0 голосов
/ 01 августа 2020

При настройке соединения между двумя объектами с использованием Entity Framework (сначала код) мне трудно обрабатывать именование свойств.

В следующем примере кода он не найдет правильного соединения и запросить столбец с именем 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>. Я хочу иметь возможность определять свое собственное имя. Как это сделать?

Ответы [ 2 ]

0 голосов
/ 01 августа 2020

Я нашел решение в этом руководстве: 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; }
0 голосов
/ 01 августа 2020

Вы не указали, используете ли вы Code First или нет, но попробуйте следующее в своем классе DBConext:

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