更新实体框架中的多个列
本文关键字:实体 框架 更新 | 更新日期: 2023-09-27 18:36:03
我想更新实体框架中的多个列。我现在使用这个:
var user = new Relations { Id=1, Status = 1, Date = DateTime.Now, Notification = 0 };
db.Relations.Attach(user);
db.Entry(user).Property(x => x.Status).IsModified = true;
db.Entry(user).Property(x => x.Notification).IsModified = true;
db.Entry(user).Property(x => x.Date).IsModified = true;
db.Configuration.ValidateOnSaveEnabled = false;
db.SaveChanges();
有没有更好的方法来更新列而不重复代码db.Entry(user).Property
几次?
你可以像这样使用EntityState
:
var user=db.users.Find(userId);
user.name="new name";
user.age=txtAge.text;
user.address=txtAddress.text;
context.Entry(user).State=Entitystate.Modified;
我更喜欢使用:
var existingUser = context.Set<User>().Where(u => u.Id == 1);
context.Entry(existingUser).CurrentValues.SetValues(user);
或者你可以使用像GraphDiff这样的第三个库。
Yo 更新一个你不需要这样做的实体:
// build your entity object with new values
var user = new Relations { Id=1, Status = 1, Date = DateTime.Now, Notification = 0 };
//attach as modified in one single step
db.Entry(user).State = EntityState.Modified;
//execute update
db.SaveChanges();
这假定您正在设置所有实体字段,并且您的实体中没有 RowVersion 字段。需要采取额外步骤来管理这些其他情况。
试试这个,
using (var db = new YourDb())
{
try
{
db.Entry(user).State = EntityState.Modified;
}
catch (Exception)
{
return false;
}
db.SaveChanges();
return true;
}
当通过上下文获取项目时,它是
在该上下文中自动跟踪,除非您更改默认行为。
所以你可以简单地做:
var txtInputAge = 18;
var txtAdrressLine1 = "Some cool place"
//fetch the user
var user = db.Users.Find(userId);
//change the properties
user.Name = "new cooler name";
user.Age = txtInputAge;
user.Address = txtAdrressLine1;
//call save changes
db.SaveChanges();
更新 - 添加看起来像
//create new entry
User user = new User();
user.Name = "new cooler name";
user.Age = txtInputAge;
user.Address = txtAdrressLine1;
//add to context
db.Users.Add(user);
//call save changes
db.SaveChanges();
using (
var dbcontext = new MyModel()){
var matchedRecords = dbcontext.DummyTable.Where(e => e.code.Equals(entry.code) &&
e.isValid.Equals(true)).ToList();
matchedRecords.ForEach(e => e.isValid = false);
dbcontext.SaveChanges();
}