Entity Framework Core Coalesce нулевое значение - PullRequest
1 голос
/ 17 июня 2019

У меня есть база данных, которую я не могу изменить, если у человека в этой базе данных пол (в большинстве случаев) «M» / «F». В некоторых случаях пол является нулевым.

В базе данных (Oracle) это определяется как столбец Gender CHAR(1 BYTE) в базе данных.

Следующий запрос позволяет мне делать то, что я ожидал в SQL, и обернуть этот столбец в объединенную функцию

var result = from x in _context.Individuals where x.Id == 502429 select new { Sex = x.Sex ?? "U" };

Создает этот SQL ... (где я использую "u" для "unknown")

SELECT COALESCE("x"."GENDER", N'U') "Gender" FROM "INDIVIDUAL" "x" WHERE "x"."Id" = 12345 FETCH FIRST 1 ROWS ONLY

Но следующее не позволяет мне указать параметр объединения ...

var someone = await _context
    .Individuals
    .AsNoTracking()
    .Include(x=>x...)
    .Include(x=>x...)
    .Where(x => x.Id == id)
    .FirstOrDefaultAsync();

Вместо этого получается SQL ...

SELECT "Individual"."SEX", "..other columns.."
FROM "Individual" "x"
WHERE "x"."Id" = :id_0
FETCH FIRST 1 ROWS ONLY

Я попытался указать атрибут типа [Column("sex", TypeName = "nvarchar(1)")], установить значение по умолчанию для построителя моделей modelBuilder.Entity<Individual>().Property(x=>x.Sex).HasDefaultValue, тип столбца для моделиBuilder HasColumnType,

Как мне сгенерировать SQL, который я ожидал бы в этом случае, чтобы база данных выполняла эту работу, и я получил обратно то, на что я мог положиться в своем коде?

Мой обходной путь - использовать строку, а не тип символа, но это открывает целый другой пакет с червями, я хотел бы иметь возможность использовать Coalesce с вышеприведенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...