EFCore генерирует имя фантомного столбца в select - PullRequest
0 голосов
/ 10 февраля 2020

Я обновляю проект до EFCore 2.2.0 с 2.1.3 и столкнулся с этой странной проблемой. При загрузке данных для простой таблицы я получаю исключение, что «ExchangeCd1» не определен. Этот столбец не существует, но нигде в коде на него нет ссылок. Когда я проверяю свойства сопоставления, я вижу его в списке: {Свойство: ExchangeHoliday.ExchangeCd1 (без поля, строка) Shadow FK Index 2 2 2 0 1}

Классы довольно простые, но дочерние имеет составной первичный ключ, и родитель пытается ссылаться на него, используя свой отдельный ключ.

public class Exchange
{
    public string ExchangeCd { get; set; }

    public string ExchangeName { get; set; }

    public DayOfWeek WeekendStart { get; set; }

    public DayOfWeek WeekendEnd { get; set; }

    public ICollection<ExchangeHoliday> Holidays { get; set; }
}

public class ExchangeHoliday
{
    public string ExchangeCd { get; set; }

    public DateTime HolidayDate { get; set; }

    public bool IsTradeHoliday { get; set; }

    public bool IsSettleHoliday { get; set; }
}

Я добавляю некоторое сопоставление, чтобы определить первичный ключ как составной ключ

modelBuilder.Entity<Exchange>().HasKey(e => e.ExchangeCd);
modelBuilder.Entity<ExchangeHoliday>().HasKey(e => new { e.ExchangeCd, e.HolidayDate });

Затем я выполняю очень простой выбор

var holidays = await dbContext.ExchangeHolidays.ToArrayAsync(cancellationToken).ConfigureAwait(false);

Я включил ведение журнала EFCore SQL, и он генерирует это для SQL

SELECT [e].[exchange_cd], [e].[holiday_date], [e].[ExchangeCd1], [e].[is_settle_holiday], [e].[is_trade_holiday]
FROM [exchange_holiday] AS [e]

Я пытался добавить явное отображение удалить теневой ключ, но он застрял вокруг

modelBuilder.Entity<Exchange>()
                    .HasMany<ExchangeHoliday>()
                    .WithOne(e => e.Exchange)
                    .HasForeignKey(fk => fk.ExchangeCd);

1 Ответ

1 голос
/ 11 февраля 2020

Хорошо, поэтому, если я сделаю сопоставление для ребенка, это решит проблему

modelBuilder.Entity<ExchangeHoliday>()
                    .HasOne<Exchange>()
                    .WithMany(e => e.Holidays)
                    .HasForeignKey(e => e.ExchangeCd);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...