mysql字段如下所示:

mysql在现有数据库上的实体框架
我的应用程序是一个MVC4项目,在mysql上使用EF 4.4和现有的数据库。
当表的所有字段都不能为空但有默认值时,我如何才能更新部分字段。当为部分字段创建或更新持久化到数据库时,EF将自动为那些未显式指定的字段填充null,我将得到一个异常。
我不想修改数据库。我可以用这个做什么?谢谢
编辑:
我的代码是这样的。在您看来,如何对其进行更改?
[HttpPost]
public ActionResult Edit(Post_15 post)
{
if (ModelState.IsValid)
{
db.Entry(post).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(post);
}发布于 2012-08-23 17:28:19
您必须为对象提供默认值(例如,在构造函数中)。EF不能很好地处理数据库默认值。使用default update,EF总是为每一列发送显式值。当您发送显式值时,不使用数据库的默认值。如果不在应用程序中设置属性的值,则.NET的默认值为send to database。
或者,您必须以完全不同的方式处理更新。您必须显式设置要更新的列,以确保EF不会更新其他列。
var entity = new YourEntity {
Id = 123,
ColumnToUpdate = "ABC"
};
objectContext.Attach(entity);
ObjectStateEntry entry = objectContext.ObjectStateManager.GetObjectStateEntry(entity);
entry.SetModifiedProperty("ColumnToUpdate");
objectContext.SaveChanges();此代码将仅更新ColumnToUpdate,即使有20个其他持久化属性也是如此。
编辑:
DbContext替代方案:
var entity = new YourEntity {
Id = 123,
ColumnToUpdate = "ABC"
};
dbContext.Entities.Attach(entity);
DbStateEntry<Entity> entry = dbContext.Entry(entity);
entry.Property(e => e.ColumnToUpdate).IsModified = true;
dbContext.SaveChanges();附注:只有.NET 4.5支持将IsModified设置回false。
https://stackoverflow.com/questions/12088384
复制相似问题