Gre*_*Gum 4 entity-framework-core
我有这个在 EntityFrameworkCore 中工作的代码。
public void SaveProject(Project item)
{
var existing = _context.Projects.FirstOrDefault(a => a.Id == item.Id);
existing.Description = item.Description;
existing.IsArchived = item.IsArchived;
existing.IsDeleted = item.IsDeleted;
existing.Name = item.Name;
_context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
它采用一个断开连接的实体,在数据库中找到它,并应用更改。
有一个更好的方法吗?
我不想调用数据库。换句话说,我希望能够将实体标记为已修改,然后调用 SaveChanges()。
有没有办法做到这一点?
如果您确定该项目存在于数据库中,则可以使用 DbContext 的 Attach 方法如下
public void SaveProject(Project item)
{
_context.Projects.Attach(item);
_context.Entity(item).State=EntityState.Modified;
_context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
在 EntityFramework Core 中,现在可以使用 Update 方法来完成:
DbContext.Update<Item>(item);
this.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
在版本 2.1 中,如果自动生成 Id 属性,则 Update 方法现在可用于新实体和现有实体。
这样做的缺点是所有属性都被标记为已修改,即使它们是相同的。这样做的问题是,如果您在数据库触发器中记录更改,则每个属性都将被标记为已更改,即使它们没有更改。如果您只想更新特定属性,则需要从数据库获取实体,根据需要更新,然后保存。
| 归档时间: |
|
| 查看次数: |
3582 次 |
| 最近记录: |