gpt4 book ai didi

c# - 为什么我的 EF4.1 关系在分配 null 值时没有设置为 null?

转载 作者:太空狗 更新时间:2023-10-29 21:19:35 25 4
gpt4 key购买 nike

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

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

如果未指定联系人,则 contact 变量为空。这应该在我提交更改时取消联系关系,但是我注意到我在 99% 的时间里都没有发生这种情况(我看到它发生过一次,但之后并不一致一遍又一遍地执行此代码)。

当我调试时,我已验证 _contactChangedtrue 并且内部代码未被命中。但是,在我跳过 task.Contact = contact; 之后,我注意到虽然 contact 为 null,但 task.Contact 的类型为

{System.Data.Entity.DynamicProxies
.Contact_4DF70AA1AA8A6A94E9377F65D7B1DD3A837851FD3442862716FA7E966FFCBAB9}

并且仍然与之前的数据相关联。

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

最佳答案

哇。很好的问题。我能够确认/重现这一点,即使所指对象不是动态代理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 中),这将变得容易得多。

关于c# - 为什么我的 EF4.1 关系在分配 null 值时没有设置为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5764760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com