实体框架 - 简单操作给出格式异常 - 索引(基于零)必须大于或等于零

时间:2015-02-01 00:04:14

标签: c# entity-framework entity-framework-6.1

当我尝试执行简单的添加操作时,实体框架会给出一个非常神秘的错误消息。

_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. 整数,bools和字符串 - 获取默认值
  2. 我提供的一个不可为空的DateTime属性(DateJoined)
  3. 一个可以为空的DateTime属性
  4. 一个枚举,正确默认为0
  5. 虚拟ICollections
  6. 我不知道导致问题的财产是什么,我怎么能更具体地了解?它可能是别的吗?异常对话框不包含查看内部异常的熟悉链接。

2 个答案:

答案 0 :(得分:4)

要了解有关正在发生的事情的更多信息,请尝试执行以下操作:

1)添加Interceptor以查看基础数据库操作。从日志中,您可以看到INSERT命令,并可能通过将其与表约束进行比较来查看正在发生的事情。

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

3)在您的模型中,将所有非强制属性逐个标记为[NonMapped]。以这种方式发现有问题的财产。如果那些继承自基类的属性,则可以在数据库配置类中以编程方式将它们标记为NonMapped

4)如果以上情况不起作用,请尝试使用LinqPad进行插入(来自1))并查看是否收到更好的错误消息

希望这有帮助

答案 1 :(得分:0)

尝试为用户提供用户名,例如

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