Тип столбца теряется только при использовании отношения "один к одному"

Моя устаревшая база данных SQL Server хранит логические значения как целые числа.

Я знаю, как настроить это преобразование. И это работает в простых запросах, таких как:

var query = db.TableChild.Select(a => new { a.BoolField }).ToList();

Но при выполнении запроса с отношением один к одному произошло исключение:

System.InvalidOperationException: Исключение произошло при чтении значения базы данных. Ожидаемый тип был «System.Boolean», но фактическое значение имело тип «System.Int32». ---> System.InvalidCastException: невозможно привести объект типа «System.Int32» к типу «System.Boolean».

Если я изменяю отношение к соединению таблиц или использую Include, все работает нормально, типы преобразуются.

Неверный запрос с исключением:

var query = db.TableParent
    .Where(a => a.Child != null)
    .Select(a => new { a.Child.BoolField })
    .ToList();

Отношение создается как:

entityTypeChild
    .HasOne(b => b.Parent)
    .WithOne(a => a.Child)
    .HasForeignKey<TableChild>(b => b.ParentRefId)
    .HasPrincipalKey<TableParent>(a => a.RefId);

Таблицы отображаются как:

class TableParent
{
    [Key]
    public long Id { get; set; }
    [Required]
    public string RefId { get; set; }

    public TableChild Child { get; set; }
}

class TableChild
{
    [Key]
    public long Id { get; set; }
    [Required]
    public string ParentRefId { get; set; }
    [Column(TypeName = "int")]
    public bool BoolField { get; set; }

    public TableParent Parent { get; set; }
}

Произведенный SQL нормальный:

SELECT [a.Child].[BoolField]
FROM [TableParent] AS [a]
LEFT JOIN [TableChild] AS [a.Child] ON [a].[RefId] = [a.Child].[ParentRefId]
WHERE [a.Child].[Id] IS NOT NULL

Я ожидаю, что этот запрос linq будет работать без исключений и не будет игнорировать атрибут Column(TypeName = "int")


person xiety    schedule 28.03.2019    source источник
comment
Возможный дубликат Entity Framework C# convert int to bool   -  person Kami    schedule 28.03.2019
comment
Я отправил задачу на github.com/aspnet/EntityFrameworkCore/issues/15200.   -  person xiety    schedule 01.04.2019