Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 4 当表';s所有字段都不可为空,但具有默认值_Entity Framework 4_Nullable_Default Value - Fatal编程技术网

Entity framework 4 当表';s所有字段都不可为空,但具有默认值

Entity framework 4 当表';s所有字段都不可为空,但具有默认值,entity-framework-4,nullable,default-value,Entity Framework 4,Nullable,Default Value,mysql字段如下所示: 在现有数据库上使用mysql的实体框架 我的应用程序是一个MVC4项目,在mysql上使用EF4.4和现有数据库 当表的所有字段都不可为Null,但具有默认值时,如何只更新部分then字段。 当为字段的一部分创建或更新持久到数据库时,EF将自动为未显式指定的字段填充null,并且我将得到一个异常 我不想修改数据库。我能配什么?多谢各位 编辑: 我的代码是这样的。。。在您看来,如何对其进行更改 [HttpPost] public ActionResult Edi

mysql字段如下所示:

在现有数据库上使用mysql的实体框架

我的应用程序是一个MVC4项目,在mysql上使用EF4.4和现有数据库

当表的所有字段都不可为Null,但具有默认值时,如何只更新部分then字段。 当为字段的一部分创建或更新持久到数据库时,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);
    }

必须为对象提供默认值(例如在构造函数中)。EF不能很好地处理数据库默认值。使用默认更新时,EF始终为每列发送显式值。发送显式值时,不使用数据库的默认值。如果未在应用程序中设置属性的值,.NET默认值为“发送到数据库”

或者,您必须以完全不同的方式处理更新。必须显式设置要更新的列,以确保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();
var entity=新实体{
Id=123,
ColumnToUpdate=“ABC”
};
dbContext.Entities.Attach(entity);
DbStateEntry=dbContext.entry(实体);
Property(e=>e.ColumnToUpdate).IsModified=true;
dbContext.SaveChanges();

旁注:只有.NET 4.5支持将
IsModified
设置回false。

谢谢,你给了我一个全新的想法。你说的对我来说是新鲜事。那么我是如何在EF代码第一工作流中编写的呢?谢谢,非常感谢你。你真帅。你说的我以前都没见过。我会尝试给你一个反馈。我发现Dbcontext(db)中没有“Attach”方法。为什么?我已经添加了代码。对不起,是我的错Attach方法在
DbSet
上为您的实体类型公开。我修改了答案中的代码。