使用Entity Framework更新多个列

3
我想在Entity Framework中更新多列。我现在使用以下代码:
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 多次的情况下更新列?

1
你为什么不直接将条目状态设置为已修改? - tede24
1
你需要仅为user对象标记entitystate已修改。 - Vishal Sharma
6个回答

5
你可以像这样使用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;

1
我更喜欢使用:

var existingUser = context.Set<User>().Where(u => u.Id == 1);
context.Entry(existingUser).CurrentValues.SetValues(user);

或者你可以使用第三方库,比如GraphDiff


为什么它还没有被接受?更简洁并且运行良好。+1 - Sangram Nandkhile

1

要更新实体,您不需要做这个:

// 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字段。如果存在这些其他情况,则需要执行额外步骤来进行管理。

0

试试这个,

using (var db = new YourDb())
            {
                try
                {
                    db.Entry(user).State = EntityState.Modified;
                }
                catch (Exception)
                {
                    return false;
                }

                db.SaveChanges();
                return true;
            }

0

如果通过上下文获取项目,则该项目会自动跟踪到该上下文中,除非您更改了默认行为。

因此,您可以简单地执行以下操作:

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();

0

使用(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();

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接