为什么我的EF4.1关系在分配空值时不被设置为空



在我的系统中,我有任务,可以选择分配给联系人。所以在我的业务逻辑中,我有以下代码:

 if (_contactChanged) { task.Contact = contact; }

如果没有指定联系人,则contact变量为空。这是假定在我提交更改时清空联系关系,但是我注意到这并不是99%的情况下发生的(我曾经看到它发生过一次,但在反复执行此代码后不一致)。

当我调试时,我已经验证了_contactChangedtrue,并且内部代码没有被击中。然而,在我跨过task.Contact = contact;之后,我注意到虽然contact为空,但task.Contact的类型为

{System.Data.Entity.DynamicProxies
.Contact_4DF70AA1AA8A6A94E9377F65D7B1DD3A837851FD3442862716FA7E966FFCBAB9}

,并且仍然有先前的数据绑定到它。

为什么代理没有被设置为空,我怎么能让它正常工作?

哇。好问题。我能够确认/复制这一点,,即使referent不是动态代理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中),这将变得容易得多。

相关内容

  • 没有找到相关文章

最新更新