Sam*_*ami 1 c# oop entity-framework crud
我有一个带有Entity Framework存储库模式的项目来管理数据库中的对象.我想知道为什么不通过传递新对象的引用来更新对象.(问题可能有点不准确,但你会得到代码的图片)
我的更新方法如下:
public void UpdateMyEntity(MyEntity myEntity)
{
MyEntity oldMyEntity = context.MyEntities.Where(m => m.Id == myEntity.Id).FirstOrDefault();
oldMyEntity = myEntity;
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
现在我已经检查过oldMyEntity更新的属性以匹配那些myEntity,所以我可以假设数据库中的对象得到更新.出于某种原因,情况并非如此.如果我将代码更改为以下内容:
public void UpdateMyEntity(MyEntity myEntity)
{
MyEntity oldMyEntity = context.MyEntities.Where(m => m.Id == myEntity.Id).FirstOrDefault();
oldMyEntity.MyProperty = myEntity.MyProperty;
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
对象按原样更新.
问题:为什么不传递整个对象?传递整个对象而不是一个接一个地传递所有属性会更有效.
对不起,请提出详细的问题并感谢您的回答.
在您的第一个代码片段中发生的事情不是对引用对象的更新,它是对对象的引用的更新,而对象本身保持不变.
这是发生的事情:
MyEntity对象context.context保持不变.这是一个例子:在重新分配之前,对象引用如下所示:

分配后,它看起来像这样:

相反,您的第二个代码段会修改由您提供给您的原始对象context.跟踪此对象,因此在其属性中设置新值会导致保存更改时的更新:

| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |