实体框架仅更新特定列 - EntityState.Modified错误和Attach提供错误

时间:2015-08-25 22:05:23

标签: c# entity-framework

我正在查看stackoverflow并查看选定的答案,这让我相信这很好,但我收到此错误

//db.Entry(tips).State = EntityState.Modified;
db.tblTips.Attach(tips);
db.Entry(tips).Property(x => x.createdby).IsModified = false;
db.Entry(tips).Property(x => x.created).IsModified = false;
tips.updated = DateTime.Now;
var recordsUpdated = db.SaveChanges();

以下任何一行的错误

db.Entry(tips).State = EntityState.Modified;
or..
db.tblTips.Attach(tips);
  

附加“BRM.Data.Models.tblTips”类型的实体失败,因为同一类型的另一个实体已具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图表,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。

我应该这样做:

if (TryUpdateModel(newsToUpdate, "",
           new string[] { "LastName", "FirstMidName", "EnrollmentDate" }))

我也有int和datetime

更新

1. Should I use `db.Entry(newsToUpdate).State = EntityState.Modified;` 
2. OR use `db.Entry(newsToUpdate).State = EntityState.Modified;`

下面我看到如果使用方法参数中的模型来更新特定字段,然后使用.Entry作为从数据库中水合的模型newToUpdate - 这看起来“好吗” ?“

db.Entry(newsToUpdate).State = EntityState.Modified;
//db.tblTips.Attach(newsToUpdate);
db.Entry(newsToUpdate).Property(x => x.createdby).IsModified = false;
db.Entry(newsToUpdate).Property(x => x.created).IsModified = false;
newsToUpdate.updated = DateTime.Now;
newsToUpdate.body = tips.body;
newsToUpdate.title = tips.title;
var recordsUpdated = db.SaveChanges();

1 个答案:

答案 0 :(得分:2)

好的,这可行

代码:

db.Entry(newsToUpdate).State = EntityState.Modified;
//db.tblTips.Attach(newsToUpdate);
db.Entry(newsToUpdate).Property(x => x.createdby).IsModified = false;
db.Entry(newsToUpdate).Property(x => x.created).IsModified = false;
newsToUpdate.updated = DateTime.Now;
newsToUpdate.body = tips.body;
newsToUpdate.title = tips.title;
var recordsUpdated = db.SaveChanges();