EF6中是怎么实现判断是否赋过null?求大神解答

背离终点 2015-04-16 04:05:39
DbFirst方,数据库中有一个允许为空的datetime类型,ef生成的代码如下:

using System;
using System.Collections.Generic;

public partial class Table_1
{
public System.Guid ID { get; set; }
public Nullable<System.DateTime> AduitDate { get; set; }
public string Value { get; set; }
}

查看定义并没有其他分布类,所以不存在其他属性或方法来记录属性是否修改过

测试代码如下:

using (TestEntities te = new TestEntities())
{
Table_1 ddd = te.Table_1.First(x => x.ID == id);
ddd.Value = "4444";
ddd.AduitDate = null;
te.SaveChanges();
/*
* exec sp_executesql N'UPDATE [dbo].[Table_1]
* SET [AduitDate] = NULL, [Value] = @0
* WHERE ([ID] = @1)
* ',N'@0 varchar(50),@1 uniqueidentifier',@0='4444',@1='4D48ADF2-CAD8-43CD-BAA8-C3C46FD7AAC3'
*/
}
using (TestEntities te = new TestEntities())
{
Table_1 ddd = te.Table_1.First(x => x.ID == id);
ddd.Value = "5555";
te.SaveChanges();
/*
* exec sp_executesql N'UPDATE [dbo].[Table_1]
* SET [Value] = @0
* WHERE ([ID] = @1)
* ',N'@0 varchar(50),@1 uniqueidentifier',@0='5555',@1='4D48ADF2-CAD8-43CD-BAA8-C3C46FD7AAC3'
*/
}

注意:
第一个Update给AduitDate赋值为null, 捕捉到的sql就有[AduitDate] = NULL
第二个Update没有AduitDate赋值, 捕捉到的sql就不会有[AduitDate] = NULL
那么问题来了,nullable<>默认值就应该是null,ef是怎么区分我是否手动给赋值的null呢?
望大神给讲解,谢谢
...全文
416 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
背离终点 2015-04-21
  • 打赏
  • 举报
回复
引用 6 楼 lincolnandlinda 的回复:
从另一个角度想,即使多做了null字段的更新也没有什么大问题
有问题啊 修改一条数据,赋值代表数据库是null,不赋值代表是原值
lincolnandlinda 2015-04-20
  • 打赏
  • 举报
回复
从另一个角度想,即使多做了null字段的更新也没有什么大问题
背离终点 2015-04-20
  • 打赏
  • 举报
回复
自己顶一下,期待大神
  • 打赏
  • 举报
回复
如果是想修改成null,那么后台做处理把null换成"" 这样就知道是不是认为修改过的了。。 符合你的需求不
背离终点 2015-04-17
  • 打赏
  • 举报
回复
引用 2 楼 u011710947 的回复:
如果是想修改成null,那么后台做处理把null换成"" 这样就知道是不是认为修改过的了。。 符合你的需求不
谢谢你回答,不过对Nullable<Datetime>是不能设置为空字符串的 其实我这没什么特殊需求,只是想了解下ef内部是通过什么方式来实现的,想学习一下
背离终点 2015-04-17
  • 打赏
  • 举报
回复
引用 1 楼 winner2050 的回复:
旧值和新值不相同的时候才会被参加update ef里面有个状态管理机制的。
像我写的那个例子中第一个update旧值应该为默认值null,然后我新值赋的也是null,新值和旧值是一样的,为什么捕捉的sql会有[AduitDate] = NULL呢? 还有ef里的状态机制好像是针对每条数据吧?还是针对每条数据中的每个字段呢?
winner2050 2015-04-16
  • 打赏
  • 举报
回复
旧值和新值不相同的时候才会被参加update ef里面有个状态管理机制的。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧