Gre*_*Gum 2 c# entity-framework-core
我只需要更新实体的一两个属性。换句话说,我有一个带有 Id、ParentId、Name 和 Description 的实体。
问题是当名称更新时,如果描述已经存在于数据库中,它就会被清除。
这是代码:
internal void Update(ItemInfo itemInfo)
{
var item = new Item { Id = itemInfo.Id, ParentId = itemInfo.ParentId, Name = itemInfo.Name };
var entry = this.DbContext.Items.Attach(item);
if (item.ParentId != null) entry.Property(x => x.ParentId).IsModified = true;
if (!(String.IsNullOrWhiteSpace(item.Name))) entry.Property(x => x.Name).IsModified = true;
this.SaveChanges();;
}
Run Code Online (Sandbox Code Playgroud)
我认为由于我将特定属性设置为已修改,因此只会更新该属性。
或者我应该首先从数据库中获取实体,然后只设置属性并保存。我想避免一次保存两次访问数据库。
Moh*_*mad 10
您可以执行以下操作以更新单个属性:
internal void Update(ItemInfo itemInfo)
{
if (itemInfo == null) { throw new Exception($"item info was not supplied"); }
var itemInfoEntity = new ItemInfo()
{
Id = itemInfo.Id,
ParentId = itemInfo.ParentId,
Name = itemInfo.Name
};
dbContext.ItemInfo.Attach(itemInfoEntity);
dbContext.Entry(itemInfoEntity).Property(x => x.Id).IsModified = true;
dbContext.Entry(itemInfoEntity).Property(x => x.Id).IsModified = true;
dbContext.Entry(itemInfoEntity).Property(x => x.Id).IsModified = true;
dbContext.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
但是如果你只更新几个属性,那么我认为你不应该将整个对象作为参数发送,只需发送需要更新的属性,如下所示:
internal void Update(id, parentId, name)
{
...
}
Run Code Online (Sandbox Code Playgroud)