我只需要更新实体的一个或两个属性。换句话说,我有一个具有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();;
}
我认为,因为我将特定属性设置为已修改,所以只会更新该属性。
或者我应该首先从数据库中获取实体,然后只是设置属性并保存。我想避免两次访问数据库进行单次保存。
答案 0 :(得分:1)
您必须先从数据库中获取实体,然后更新实体。
答案 1 :(得分:0)
您可以执行以下操作以更新单个属性:
String strNumber = ag.getText().toString().trim();
if(TextUtils.isEmpty(strNumber)){
Toast.makeText(Addrecord.this,"Please input a number",Toast.LENGTH_LONG).show();
}else{
String regexStr = "^[0-9]*$";
if(your_editText.getText().toString().trim().matches(regexStr))
{
//write code here for success
your_editText.setError(null) // to clear any errors
}
else{
your_editText.setError(“please insert numbers only”);
}
}
}
但是,如果您仅更新一些属性,那么我认为您不应该将整个对象作为参数发送,而只需发送需要更新的属性,如下所示:
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();
}