实体框架核心合并null值

时间:2019-06-17 19:05:53

标签: c# linq entity-framework-core

我有一个无法更改的数据库,该数据库中的个体的性别(大部分时间)为“ 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”用于“未知”)

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 modelBuilder.Entity<Individual>().Property(x=>x.Sex).HasDefaultValue上设置默认值,在modelBuilder HasColumnType上设置列类型,

如何生成在这种情况下期望的SQL,以便数据库执行工作并获得我在代码中可以依赖的东西?

我的解决方法是使用字符串而不是char类型,但是这会打开另一包蠕虫,我希望能够结合使用上述方法。

0 个答案:

没有答案