Kal*_*exx 6 c# entity-framework ef-code-first entity-framework-4.1
在我的系统中,我有任务,可以选择分配给联系人.所以在我的业务逻辑中,我有以下代码:
if (_contactChanged) { task.Contact = contact; }
Run Code Online (Sandbox Code Playgroud)
如果未指定联系人,则该contact
变量为null.当我提交更改时,这应该会使联系人关系无效,但是我注意到99%的时间没有发生这种情况(我已经看到它发生过一次,但是在经过一遍又一遍的代码之后并不是一贯的).
当我调试时,我已经验证了_contactChanged
它true
并且内部代码没有被命中.但是,在我过去之后,task.Contact = contact;
我注意到虽然contact
是null,但是task.Contact
类型
{System.Data.Entity.DynamicProxies
.Contact_4DF70AA1AA8A6A94E9377F65D7B1DD3A837851FD3442862716FA7E966FFCBAB9}
Run Code Online (Sandbox Code Playgroud)
并且仍然有以前与之相关的数据.
为什么代理不被设置为null,我怎样才能让它正常工作?
哇.好问题.我能够确认/重现这一点,即使指示对象不是动态代理. t.Contact = null;
不起作用!
我到目前为止最好的答案是说:
context.Entry(task).Reference(t => t.Contact).CurrentValue = null;
Run Code Online (Sandbox Code Playgroud)
我真的希望有比这更好的方法,因为这是一些非常不方便的语法.
更新:
这有效:
var task = context.Tasks
.Where(...your condition here...)
.Include(t => t.Contact)
.First();
task.Contact = null;
Run Code Online (Sandbox Code Playgroud)
要么,
如果您在模型中定义了外键ID(如在可以为空的ContactId中),则会变得更加容易.
归档时间: |
|
查看次数: |
631 次 |
最近记录: |