c# - EntityState.Modified 在实体代码优先中不起作用

标签 c# asp.net-mvc entity-framework dbcontext

我使用此代码更新表中的一个字段。(使用 Entity Framework 6.1.3)

var model = new MyTable { Id = Id, UpdateTime = DateTime.UtcNow };
var dbSet = this.dbContext.Set<MyTable>();
dbSet.Attach(model);                
entry = this.dbContext.Entry(model);
entry.State = EntityState.Modified;
this.dbContext.SaveChanges();

但这不起作用,UpdateTime 也不会改变。当我将代码更改为:

var model = this.dbContext.Set<MyTable>().Find(id);
model = new MyTable { Id = Id, UpdateTime = DateTime.UtcNow };
var dbSet = this.dbContext.Set<MyTable>();              
entry = this.dbContext.Entry(model);
entry.State = EntityState.Modified;
this.dbContext.SaveChanges();

我发现在我的第一个代码中,EF 查找没有更改的 UpdateTime 字段,但当我编写时这是正确的:

entry.State = EntityState.Modified;

ef 必须生成更新代码,那为什么不生成呢? 我该怎么做才能解决这个问题?

最佳答案

终于找到问题所在了? 我的表中有一个必需的字符串字段,我发现我们需要在 Entity Framework 中填充引用类型字段,它不能为空或空格字符,但不需要正确的值,在这种情况下我们不能这样做使用 条目.State = EntityState.Modified; 我们必须使用它来代替它 Entry.Property("UpdateTime").IsModified = true; 因此这个问题可以这样解决:

var model = new MyTable { Id = Id, UpdateTime = DateTime.UtcNow , Title = "EveryThing" };
var dbSet = this.dbContext.Set<MyTable>();
dbSet.Attach(model);                
entry = this.dbContext.Entry(model);
entry.Property("UpdateTime").IsModified = true;
this.dbContext.SaveChanges();

关于c# - EntityState.Modified 在实体代码优先中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37488943/

相关文章:

javascript - ASP.NET MVC 与 Angular JS 集成中的防伪 token 问题

asp.net - 如何防止在asp.net mvc中上传exe文件

asp.net - Entity Framework 和 Oracle - 如何插入 ID?

.net - DbContext ChangeTracker : Id of Added Entity for Auditing

c# - SQL Server 将表更改通知 Web 服务器

c# - 如何在 javaScript 中添加 C# 字符串作为文本弹出窗口

C# powershell ErrorDetail 用法

c# - 从字符串获取枚举类型

asp.net-mvc - 如何创建自定义 kendo.ui.Window 以在 kendo.ui.grid 中进行编辑

c# - 当不应存在任何行时, Entity Framework 返回非空值