2

所以我在我的领域中有一个类似于这个的模型:

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?

干杯,
查尔斯

4

0 回答 0