加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么我的EF4.1关系在赋值空值时没有设置为null?

发布时间:2020-12-15 08:15:01 所属栏目:百科 来源:网络整理
导读:在我的系统中,我有任务,可以选择分配给联系人.所以在我的业务逻辑中,我有以下代码: if (_contactChanged) { task.Contact = contact; } 如果未指定联系人,则联系人变量为null.当我提交更改时,这应该会使联系人关系无效,但是我注意到99%的时间没有发生这种
在我的系统中,我有任务,可以选择分配给联系人.所以在我的业务逻辑中,我有以下代码:
if (_contactChanged) { task.Contact = contact; }

如果未指定联系人,则联系人变量为null.当我提交更改时,这应该会使联系人关系无效,但是我注意到99%的时间没有发生这种情况(我已经看到它发生过一次,但是在经过一遍又一遍的代码之后并不是一贯的).

当我调试时,我已经验证_contactChanged为true并且内部代码没有被命中.但是,在我走过task.Contact = contact之后;我注意到,当contact是null时,task.Contact是类型

{System.Data.Entity.DynamicProxies
.Contact_4DF70AA1AA8A6A94E9377F65D7B1DD3A837851FD3442862716FA7E966FFCBAB9}

并且仍然有以前与之相关的数据.

为什么代理不被设置为null,我怎样才能让它正常工作?

解决方法

哇.好问题.我能够确认/重现这一点,即使指示对象不是动态代理. t.Contact = null;不起作用!

我到目前为止最好的答案是说:

context.Entry(task).Reference(t => t.Contact).CurrentValue = null;

我真的希望有比这更好的方法,因为这是一些非常不方便的语法.

更新:

这有效:

var task = context.Tasks
        .Where(...your condition here...)
        .Include(t => t.Contact)
        .First();

    task.Contact = null;

要么,

如果您在模型中定义了外键ID(如在可以为空的ContactId中),则会变得更加容易.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读