Entity Framework - 简单操作给出格式异常 - 索引(从零开始)必须大于或等于零

Entity Framework - simple operation gives Format exception - Index (zero based) must be greater than or equal to zero

当我尝试执行简单的添加操作时,

Entity Framework 给出了一条非常神秘的错误消息。

_context.Users.Add(new User
{
     DateJoined = DateTime.UtcNow
});
_context.SaveChanges();

FormatException:  Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

用户从 IdentityUser 继承自 Microsoft.AspNet.Identity

我交叉检查了数据库和模型,但我似乎无法确定 属性 是什么导致了问题。模型包含:

  1. 整数、布尔值和字符串 - 获取默认值
  2. 我提供的一个不可为 null 的 DateTime 属性 (DateJoined)
  3. 一个可为 null 的 DateTime 属性
  4. 一个正确默认为 0 的枚举
  5. 虚拟 ICollections

我不明白 属性 是什么导致了这个问题,我怎样才能知道更具体?会不会是别的东西?异常对话框不包含熟悉的 link 以查看内部异常。

要了解更多信息,请尝试执行以下操作:

1) 加一个Interceptor看底层数据库操作。从日志中,您可以看到 INSERT 命令,并可能通过将其与 table 约束进行比较来了解发生了什么。

2) 在 SaveChanges 上打断点,从 Context 对象中查看被跟踪的实体。确保此用户是唯一添加的实体并标记为脏。从那里您还可以看到它的属性

3) 在您的模型中,将所有非强制属性一一标记为[NonMapped]。以这种方式找出有问题的 属性。如果这些属性是从基础 class 继承的,您可以在数据库配置 class.

中以编程方式将它们标记为 NonMapped

4) 如果以上方法均无效,请尝试使用 LinqPad 进行插入(来自 1) )并查看是否收到更好的错误消息

希望对您有所帮助

尝试给用户一个用户名,例如

_context.Users.Add(new User
{
    UserName = "Bob",
    DateJoined = DateTime.UtcNow
});
_context.SaveChanges();