c# - 导致 object.child = null 对象失败的动态代理?
问题描述
我注意到一些我无法解释的奇怪行为,可能与动态代理有关,因为我无法通过简单的对象实例化重新创建它,但更奇怪的是?
我试图用来绕过它的操作符行为。
我有两个简单的对象:
public class Parent
{
public int Id { get; set; }
public virtual Child Child { get; set; }
public string Name { get; set; }
}
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
}
我使用一种方法找到一个Parent
对象,DbContext
例如
Parent parentToUpdate = _context.Parent.Find(1);
这个对象已经配备了一个填充的孩子,比如 ID 22,生成为System.Data.Entity.DynamicProxy
然后我有一个新的子对象,它变为空,因为在数据库中找不到它,使用相同的 DbContext:
Child newChild = _context.Child.Find(999); // returns null
然后我尝试用对象覆盖parentToUpdate
对象的子newChild
对象:
parentToUpdate.Child = newChild;
这间歇性地不起作用 -parentToUpdate.Child
不会变为空。
问题 1 - 为什么这不起作用? 我很确定这与动态代理有关。
然后我想好吧,我会先检查一个空值:
if(newChild == null)
{
parentToUpdate.Child = null;
}
else
{
parentToUpdate.Child = newChild;
}
这种if else
格式总是有效的。
但实际上我只是这样尝试过,因为在此之前,我以简洁的方式尝试过,使用?
parentToUpdate.Child = newChild == null ? null : newChild;
而这通常也不起作用。
问题 2 这个语句怎么会失败?它既没有赋值null
也没有newChild
对象(这也是空的!) - 这个语句基本上不是一个if else
语句吗?
我在调试配置中进行测试时注意到了这一点,但实际上单步执行代码似乎这种行为发生的频率要低一些。
这里发生了什么?
解决方案
推荐阅读
- javascript - 如何在使用 FileContentResult ActionResult 时了解客户端 ASP.NET MVC 中的文件下载状态?
- haskell - 多态函数的引用透明性
- excel - 如何在 Excel 中查找和替换文本然后保留格式?
- oauth-2.0 - 可以在两个自定义服务之间转发 JWT 吗?
- java - 应用关闭时只运行前台服务以减少内存使用
- c# - Dapper fluent map 不会更改我的专栏名称
- asp.net - Azure 中的 Windows AD 用户模拟
- pdf - 将阿拉伯 PDF 解析为纯文本
- javascript - JS - 将整数保存为浮点数
- javascript - 具有依赖关系的 Webpack 多文件