【发布时间】:2021-03-03 15:57:13
【问题描述】:
我有一个映射到以下实体的 SQL VIEW:
public class MyView {
public string Name {get; set;}
public int Count {get; set;}
}
我像dbContext.MyView.ToArrayAsync() 或dbContext.MyView.Where(e => e.Count > 0) 等使用它。
视图在生产中的 Count 列中返回 NULL,并且在评估查询时我得到 NullReferenceExeption。
我能否配置映射,以便将 NULL 值映射到 default(int) 和 0?
我尝试使用可为空的支持字段private int? _count,但仍然出现异常。要求是,除了实体本身或映射之外,我不想更改 SQL 视图或我的代码。
【问题讨论】:
-
这能回答你的问题吗? Mapping NULLs to type default
-
@MindSwipe:不,因为它会破坏使用该列的查询,例如
dbContext.MyView.Where(e => e.Count > 0)。我不能在查询中使用 Ignored 属性。此外,它没有回答这个问题。这是使用不同技术的解决方法,但不是答案 -
请把票数拿回来,还为时过早 ;)
-
您已尝试使用可为空的支持 field,但 AFAIK EF 仅映射到 properties。此外,除了将 null 映射到
default(int)之外,我看不到支持字段如何以任何其他方式破坏查询 -
我使用过HasField("_count") - 所以 EF 确实映射到字段 :) 但我也尝试使用您发布的“烘焙属性”解决方法。它建议忽略原始属性。一旦忽略它,就不能使用它查询表达式,因为 EF Core 现在不知道如何翻译它(例如在 WHERE 条件下)。忽略的属性无法转换为 SQL
标签: c# sql-server entity-framework-core ef-core-5.0