所以我在我的领域中有一个类似于这个的模型:
public class Product
{
public virtual Tag Methodology { get; set; }
}
然后在一个网络表单项目中,我像这样更新它:
if (!string.IsNullOrWhiteSpace(ddlMethodology.SelectedValue))
product.Methodology = TagRepo.GetTagById(int.Parse(ddlMethodology.SelectedValue));
else
product.Methodology = null;
但这并没有更新product.Methodology
之前设置为对象的时间,我想将其更改为空。即这product.Methodology = null;
条线似乎没有按预期工作。
当我在调试器中运行它时,我发现有时它会工作,有时它不会。经过少量的拉扯,我意识到这是由于实体框架在运行时为该属性创建的代理类型,当我在调试器中检查它时它正在工作。
所以为了解决这个问题,我创建了这个效果很好的黑客:(注意:现在是一个else if
)
if (!string.IsNullOrWhiteSpace(ddlMethodology.SelectedValue))
product.Methodology = TagRepo.GetTagById(int.Parse(ddlMethodology.SelectedValue));
else if (product.Methodology != null)
product.Methodology = null;
所以我想我的问题是:
- 难道我做错了什么?
- 有没有另一种方法可以记住每次都做一次黑客攻击?
- 会不会算是实体框架代码先CTP的bug?
干杯,
查尔斯