EF / ASP Core将字符串属性设置为NULL而不是空

时间:2018-03-16 16:43:37

标签: asp.net-core entity-framework-core asp.net-core-webapi

我注意到我的对象在客户端留空的所有属性在绑定时都在服务器端保持为空。

由于字符串属性为null而不是空,因此最后会在执行某些LINQ Where条件时引发空对象异常。

我已经尝试使用context.DisplayMetadata.ConvertEmptyStringToNull = false添加CustomMetadataProvider;作为dicuss ModelBinding,但没有运气。

 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();

1 个答案:

答案 0 :(得分:0)

字符串应该是非可空的,或者你应该处理null case。在您的数据库中,支持列将设置为NULL或NOT NULL,具体取决于您是否将[Require]属性添加到属性。如果不需要,则NULL是一个完全可接受的值,甚至可以说是 best 值,因为它明确指示“unset”而不是“设置为空字符串”。

长和短,如果您要查询可空属性,请先检查 的空值:

(q.Name != null && q.Name.Contains(query.Search)) ||