C# 在调试时将值设置为null,而在运行时则设置为null

C# 在调试时将值设置为null,而在运行时则设置为null,c#,asp.net,linq,entity-framework,linq-to-entities,C#,Asp.net,Linq,Entity Framework,Linq To Entities,我的类别可以有子类别/根类别。当我将根类别更改为其他类别时,它可以工作,但当我尝试将其设置为null(使其成为根类别)时,它不会更改任何内容。如果有什么不同的话,我会使用代码优先的方法 下面是我明确声明category.RootCategory=null的代码,但它不起作用,根目录仍然是以前设置的 控制器 模型 公共类类别 { 公共int ID{get;set;} 虚拟公共类别RootCategory{get;set;} 虚拟公共ICollection子类别{get;set;} } 更新 非常

我的类别可以有子类别/根类别。当我将根类别更改为其他类别时,它可以工作,但当我尝试将其设置为
null
(使其成为根类别)时,它不会更改任何内容。如果有什么不同的话,我会使用代码优先的方法

下面是我明确声明
category.RootCategory=null
的代码,但它不起作用,根目录仍然是以前设置的

控制器 模型
公共类类别
{
公共int ID{get;set;}
虚拟公共类别RootCategory{get;set;}
虚拟公共ICollection子类别{get;set;}
}
更新
非常奇怪的行为。当我调试它并一步一步慢慢地进行时,它会更新它,当我不调试它或运行得很快时,它不会更新。我不知道为什么会这样。

无论如何,我添加了
public int?RootCategoryID{get;set;}
到我的模型,现在我可以像这样编辑它

[HttpPost]
public ActionResult Edit(Category c)
{
    var cateogry = _db.Categories.Where(x => x.ID == c.ID).Single();

    if (TryUpdateModel(cateogry))
    {
        cateogry.UpdatedDateTime = DateTime.Now;
        _db.SaveChanges();
    }

    return Redirect("/admin/category");
}

它现在可以工作了,但仍然不知道为什么它在运行时没有RootCategoryID,在调试时也可以工作。

无论如何,我添加了
public int?RootCategoryID{get;set;}
到我的模型,现在我可以像这样编辑它

[HttpPost]
public ActionResult Edit(Category c)
{
    var cateogry = _db.Categories.Where(x => x.ID == c.ID).Single();

    if (TryUpdateModel(cateogry))
    {
        cateogry.UpdatedDateTime = DateTime.Now;
        _db.SaveChanges();
    }

    return Redirect("/admin/category");
}

它现在可以工作了,但仍然不知道为什么它在运行时没有RootCategoryID也能工作,在调试时也能工作。

@SidharthMudgal如果我看到json输出而不是重定向,那么它就会工作,否则我会被重定向到
/admin/category
。奇怪。你是如何测试它的。JSON输出显示RootCategory仍然被设置;2.我只是返回并刷新页面,页面并没有改变(你能试着在
cateogry.RootCategory=null;
上设置一个断点,然后检查每个语句之后会发生什么情况吗?如果我运行缓慢,当我快速通过行时,它就不起作用了。WTF?!0。o@SidharthMudgal如果我看到的是json输出,而不是重定向,那么它确实看到了,否则我将被重定向到
/admin/category
。奇怪。您是如何测试它的?1.JSON输出显示RootCategory仍然设置;2.我只是返回并刷新页面,但页面没有更改:(你能试着在
cateogry.RootCategory=null;
上设置一个断点,然后检查它后面的每一条语句发生了什么吗?当我运行缓慢时,它会工作,当我快速通过行时,它不会工作。WTF?!0。这可能是延迟加载和调试器的副作用。如果Wath/windo中显示了导航属性w正在对其进行评估,这可能会触发延迟加载,因此,当您使用调试运行时,程序的状态实际上与未连接调试程序时不同。请尝试从“监视”窗口中删除所有属性/对象,然后关闭“自动”和“局部变量”窗口,查看行为是否相同。这可能是延迟加载和调试器。如果Wath/Locals窗口中显示了导航属性,则正在对其进行评估,这可能会触发延迟加载,因此,当您运行调试和未连接调试器时,程序的状态实际上是不同的。请尝试从“监视”窗口中删除所有属性/对象,然后关闭“自动”和“锁定”cals窗口并查看行为是否现在相同。
[HttpPost]
public ActionResult Edit(Category c)
{
    var cateogry = _db.Categories.Where(x => x.ID == c.ID).Single();

    if (TryUpdateModel(cateogry))
    {
        cateogry.UpdatedDateTime = DateTime.Now;
        _db.SaveChanges();
    }

    return Redirect("/admin/category");
}