gpt4 book ai didi

entity-framework - EntityFramework 不保存 null 和 false 值

转载 作者:行者123 更新时间:2023-12-04 08:32:17 28 4
gpt4 key购买 nike

我正在尝试通过附加断开连接的实体来使用 EntityFramework 6 更新记录。我想将单个 bool 字段更新为 false 但它不起作用。我使用过 sql server profiler,并且 EF 在上下文中调用 SaveChanges 时不会生成更新语句。但是,如果我将该值设置为 true,它就会起作用。示例:

这行不通:

 private void UpdateUser()
{
var user = new User { ID = 5 };
this.Context.Users.Attach(user);

user.Locked = false;
this.Context.SaveChanges();
}

这个有效:

 private void UpdateUser()
{
var user = new User { ID = 5 };
this.Context.Users.Attach(user);

user.Locked = true;
this.Context.SaveChanges();
}

我可以通过将属性标记为已修改来修复,如下所示:

this.Context.Entry(user).Property(e => e.Locked).IsModified = true;

但不明白为什么它在值为 true 时有效,而在值为 false 时无效。尝试将字段设置为 null 时会出现类似的问题。

实体数据模型或数据库可能有问题,但无法弄清楚是什么。

最佳答案

Boolean 的默认值为 false,因此在附加后设置为 false 不会将属性标记为已更改。

您可以先加载实体,然后进行修改,然后保存更改。

var user = db.Users.Find(5);
user.Locked = false;
db.SaveChanges();

或者您可以将要更新的字段附加到实体中,并为 bool 字段设置不同的值

var user = new User { Id = 5, Locked = true; };
db.Users.Attach(user);
user.Locked = false;
db.SaveChanges();

关于entity-framework - EntityFramework 不保存 null 和 false 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23006949/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com