C# 为什么';我的代码不能更新数据库吗?

C# 为什么';我的代码不能更新数据库吗?,c#,entity-framework,C#,Entity Framework,看看这两个代码 第一: Slide _Slide = DataContext.Slides.SingleOrDefault(rec => rec.Id == _SlideObj.Id); _Slide = _SlideObj; DataContext.SaveChanges(); 第二: Slide _Slide = DataContext.Slides.SingleOrDefault(rec => rec.Id == _SlideObj.Id); _Sl

看看这两个代码

  • 第一:

    Slide _Slide = DataContext.Slides.SingleOrDefault(rec => rec.Id == _SlideObj.Id);
    _Slide = _SlideObj;            
    DataContext.SaveChanges();
    
  • 第二:

    Slide _Slide = DataContext.Slides.SingleOrDefault(rec => rec.Id == _SlideObj.Id);
    _Slide.Title = _SlideObj.Title;
    _Slide.Description = _SlideObj.Description;
    DataContext.SaveChanges();
    

  • 第一个代码不更新数据库,但第二个代码更新数据库。为什么?在第一种方法中,如何更改代码以执行更新操作?(我喜欢使用第一种方法)

    没有更新,因为您没有更改任何内容。在第一种情况下,您只是将幻灯片更改为指向不同的幻灯片。

    第一种情况仅将变量的值更改为不同的引用。它实际上不会以任何方式更新对象。数据上下文正在跟踪对象

    第一种方法的问题在于设计,与您使用的框架无关

    致电: _幻灯片=_SlideObj
    您正在告诉_Slide指向_SlideObj,但在内存中,上一个指向_Slide的指针的标题和说明属性保持不变


    因此,这是正常行为。

    删除行
    \u Slide=\u SlideObj因为它覆盖了值,使得第一行完全没有意义。也许你的意思是
    \u SlideObj=\u Slide?aa否,\u SlideObj包含我要存储它们的新值database@Ali基本上:您的第二块代码就是解决方案。您还有其他解决方案吗?我想如果我有一个包含多个字段的对象,这个方法不好,同意吗?几乎只有一种方法-更改需要更改的字段。@Ali:为了避免逐个复制属性,可以使用
    DataContext.Slides.ApplyCurrentValues(\u SlideObj)
    或EF 4.1:
    context.Entry(\u Slide).CurrentValues.SetValues(_SlideObj)
    。它更新所有标量和复杂属性,但不更新导航属性。对于这些属性,您必须手动进行更新。@Slauma,谢谢我的朋友。您的评论很好。再次感谢您的帮助。