asp.net-mvc - 即使设置了有效数据, Entity Framework 也会在 saveChanges 时提示必填字段

标签 asp.net-mvc entity-framework postgresql devart

我在 MVC 中使用 Entity Framework (首先使用数据库的 DbContext)。当用户从表单保存时,我在 Controller 中有一个条件,根据我的一些内部标志将实体发送到 insert 方法的 update

将实体发送到更新方法时,我使用 context.Entry(myEntity).State = EntityState.Modified; 将其标记为已修改,我调用 saveChanges() 并且一切正常。

将实体发送到插入方法时,我使用 context.Entry(myEntity).State = EntityState.Added; 将其标记为已添加但是在调用 saveChanges() 时,我收到关于 2 个必填字段的错误...

问题是这 2 个字段不为空,它们在保存之前有效地包含有效数据...我什至尝试在保存之前将新值强制到这 2 个字段,但同样的错误。

提及我正在使用 Devart DotConnect For PostgreSQL 作为数据库提供程序可能会有用。

知道如何调试这个问题吗?

编辑:

这里是错误:

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

在查找此 EntityValidationErrors 时,我收到以下 2 个特定错误:

The flg_actif field is required

The user_creation field is required

如前所述,这些字段在保存之前填充了数据,所以我不明白发生了什么。

我正在使用 EF v4.0.30319(system.data.entity=> v4.0 和 EntityFramework=> v4.4)

编辑 2: 只是为了澄清一点:我试图插入的实体已经存在于数据库中。表格显示该数据库行的数据。保存时,我决定是否更新该行(这很好用)但有时,我需要将编辑后的行作为新寄存器插入而不是更新它以保留数据库更改的历史记录。

最佳答案

您能否验证您尝试保存的项目的 EntityKey 属性是否已设置或为空?

如果它已经有一个键,则上下文已经知道该项目,您应该使用 Attach 而不是将状态设置为手动添加。

编辑:总结下面的观点。看起来您正在做的是插入已与上下文相关联的行的新副本。这几乎肯定是你的问题。尝试基于您的原始行创建一个新对象(即复制变量值或使用复制构造函数),然后添加该新对象。

此外,您不需要在新添加的对象上手动设置状态。您试图在此处强制设置状态,因为上下文没有将该项目视为新项目。

关于asp.net-mvc - 即使设置了有效数据, Entity Framework 也会在 saveChanges 时提示必填字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13187573/

相关文章:

c# - 类库错误不包含适合入口点的静态方法 'Main'

c# - PostgreSQL 不保存完整的 DateTimeOffset

ruby-on-rails - 将对象查询到数组组中

c# - 如何将泛型类型传递给泛型方法?

javascript - Kendo UI 网格服务器过滤未将数据获取到 Controller

asp.net-mvc - 重定向(url)不起作用

c# - 如何将 BinaryExpression 转换为 Expression<Func<T, bool>>?

asp.net - RazorViewEngine.FindView找不到预编译 View

LINQ - 通过加入 Entity Framework 选择完整的对象

postgresql - 使用初始模式构建 postgres docker 容器