Asp.net core EF/ASP核心句柄字符串属性为NULL而不是空
我注意到,当绑定时,我的对象在客户端保留为空的所有属性在服务器端保持为空 这最终将在稍后执行某些LINQ Where条件时引发null对象异常,因为字符串属性是null而不是空的 我已经尝试添加context.DisplayMetadata.ConvertEmptyStringToNull=false的CustomMetadataProvider;就像迪库斯在这里,但运气不好Asp.net core EF/ASP核心句柄字符串属性为NULL而不是空,asp.net-core,entity-framework-core,asp.net-core-webapi,Asp.net Core,Entity Framework Core,Asp.net Core Webapi,我注意到,当绑定时,我的对象在客户端保留为空的所有属性在服务器端保持为空 这最终将在稍后执行某些LINQ Where条件时引发null对象异常,因为字符串属性是null而不是空的 我已经尝试添加context.DisplayMetadata.ConvertEmptyStringToNull=false的CustomMetadataProvider;就像迪库斯在这里,但运气不好 providers = await dbData.Providers.AsNoTracking().
providers = await dbData.Providers.AsNoTracking().
OrderBy(order)
.Where(q =>
(query.search == null ||
q.No.ToString().Contains(query.search) ||
q.Name.Contains(query.search) ||
q.Address.Contains(query.search) ||
q.PhoneFax.Contains(phoneQuery) ||
q.PhoneNumber.Contains(phoneQuery) ||
q.PhoneTollFree.Contains(phoneQuery)) && (query.getDeleted || !q.Deleted))
.Skip((query.limit * (query.page - 1))).Take(query.limit)
.AsNoTracking().ToArrayAsync();
字符串应该不可为null,或者您应该处理null大小写。在数据库中,支持列将设置为NULL或不为NULL,具体取决于是否将
[Require]
属性添加到属性。如果不是必需的,那么NULL是一个完全可以接受的值,甚至可以说是最好的值,因为它显式地表示“unset”,而不是“设置为空字符串”
长和短,如果您有要查询的可空属性,请首先检查空值:
我知道这个解决方案,但我想知道为什么在以前的web API和EF中我不必处理这个问题。在
q.Name
之类的东西上调用Contains
,如果它为空,总是一个问题。这是一个简单的语言级异常,没有办法解决。如果您以前没有遇到问题,那么唯一的解释是,在上一次迭代中,这些列都不是空的。
(q.Name != null && q.Name.Contains(query.Search)) ||