OriginalValues不能用于处于已添加状态的实体

我正在使用Entity Framework构建一个Web应用程序,数据库是在启动时创建的,我的种子方法将一些实体添加到数据库中而没有任何问题。 此外,实体的检索工作没有问题。

我的问题是,如果我尝试从我的UI层创建一个实体,我遇到错误OriginalValues cannot be used for entities in the Added state 。 UI没有抛出exception,但是当我从问题中挖掘出来时,我发现了它。

我发生在我的身上:

 public virtual TEntity Add(TEntity entity) { var entry = _context.Entry(entity); entry.State = EntityState.Added; _dbSet.Add(entity); return entity; } 

截图:

在此处输入图像描述

实体非常小并且映射:

 public abstract class EntityBase { public int Id { get; set; } } public class AccessCode : EntityBase { public string Code { get; set; } public int UsageCount { get; set; } } public class AccessCodeMapping : EntityTypeConfiguration { public AccessCodeMapping() { // Table ToTable("AccessCode"); // Primary key HasKey(x => x.Id); // Properties Property(accesscode => accesscode.Code).IsRequired().HasMaxLength(256); Property(accesscode => accesscode.UsageCount).IsRequired(); } } 

这就是我为演示目的创建测试访问代码的方法

 var ac = new AccessCode {Code = "321", UsageCount = 0}; _accessCodeService.Create(ac); _unitOfWork.Save(); return View("Login"); 

任何人都可以找出为什么会发生这种错误? 我迷路了。 🙂

Ps如果您希望看到一些代码,请告诉我。

我曾经遇到过这个问题,并通过检查提交给数据库的字段来解决它。 事实certificate,我无意中试图将空值插入到设计为非null的列中。

在例外情况下,寻找:

 $exception.EntityValidationErrors[n].ValidationErrors[n].ErrorMessage $exception.EntityValidationErrors[n].ValidationErrors[n].PropertyName 

其中[n]是数组索引(可能有多个)。

在此处输入图像描述

我遇到了这个问题,原因是我试图将一个长度为10的字符串放入一个Varchar列中,该列已在DB中更改为25但仍然在框架中为6.我删除了属性并从db刷新问题就消失了。

检查模型是否已过时的列具有非空约束且数据库中为null,更新模型可解决此问题。

当value为null时,检查您是否是一个非空列的SubmitChanges()。