N.EntityFramework.Extensions的UpdateFromQuery是否正确处理数据库可空列?
关于N.EntityFramework.Extensions处理数据库可空列的疑问
存在表MyTable,包含两个可空nvarchar列col1、col2,数据库中数据如下:
id col1 col2 ------------- 1 A B 2 C D
执行以下代码:
DbContext.MyTable .Where(x => x.Id == 1) .UpdateFromQuery(x => new MyTable { col1 = null });
核心疑问:UpdateFromQuery如何区分需设为NULL的列和无需更新的列?上述代码是否会将col1设为NULL,同时保留col2的值为"B"?因为C#对象中两个字段默认值均为NULL。
回答
N.EntityFramework.Extensions的UpdateFromQuery方法是基于你显式赋值的属性生成SQL更新语句的,不会因为C#对象的默认null值修改未显式指定的列。
针对你的示例:
- 代码里只显式设置了
col1 = null,所以生成的SQL只会更新col1列,将其设为NULL。 col2没有被显式赋值,无论它在C#对象中的默认值是什么,都不会被包含在UPDATE语句中,数据库里该行的col2值"B"会被完整保留。
简言之,UpdateFromQuery仅处理你主动指定的属性:显式赋值null的列会被更新为NULL,未提及的列保持数据库原有值不变,天然就能区分要修改的列和无需更新的列。
内容的提问来源于stack exchange,提问作者Ilya
相关产品推荐
相关产品推荐

