我有一个无法更改的数据库,该数据库中的个体的性别(大部分时间)为“ 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类型,但是这会打开另一包蠕虫,我希望能够结合使用上述方法。