【问题标题】:Getting exception when inserting an entity into a EF table将实体插入 EF 表时出现异常
【发布时间】:2013-12-02 03:22:57
【问题描述】:

当我将一个相当简单的实体插入到表中时,我得到以下ArgumentNullException。 我认为这并不重要,但数据库是一个 SQL Server Compact .sdf 文件。

值不能为空。 参数名称:来源

在 System.Linq.Enumerable.Any[TSource](IEnumerable1 source, Func2 谓词)
在 System.Data.Entity.Internal.InternalContext.WrapUpdateException(UpdateException updateException)
在 System.Data.Entity.Internal.InternalContext.SaveChanges()
在 System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
在 System.Data.Entity.DbContext.SaveChanges()
{{ 下面的代码}}

这是我正在使用的代码:

var newMaterial = _localJobs.DbMaterials.Create();

newMaterial.JobID = a_job.ID;
newMaterial.MaterialName = material.Name;
newMaterial.UseType = material.UseType;
newMaterial.Length = material.Length;
newMaterial.Width = material.Width;
newMaterial.Thickness = material.Thickness;
newMaterial.DefaultLength = material.DefaultLength;
newMaterial.DefaultWidth = material.DefaultWidth;
newMaterial.DefaultThickness = material.DefaultThickness;

_localJobs.DbMaterials.Add(newMaterial);
_localJobs.SaveChanges(); // <- The exception occurs here.

我正在用有效数据正确填充每个字段。这里唯一的键是JobID。它是一个外键 GUID,与名为 Job 的表有显式关系。正确的记录已存在于数据库中。

这是我的表架构。

【问题讨论】:

  • 调试的时候,其他所有的字段都是非空值吗?
  • 这可能会对您有所帮助:stackoverflow.com/questions/3244336/… - 可能不会。另外:stackoverflow.com/questions/16281133/…
  • Material 类是什么样的?
  • Material 类是一个简单的 POCO,其中 Name 是一个字符串; UseType 是一个字符串; LengthWidthThickness 是双精度数;和DefaultLengthDefaultWidthDefaultThickness 是双打。这些都不能为空,并且在我调试时都设置为有效值。
  • 对不起,我的意思是 DbMaterials。如果您在 Context 类中使用字段而不是属性,我依稀记得类似的错误。例如。如果你有public DbSet&lt;Material&gt; DbMaterials ;,你会想要public DbSet&lt;Material&gt; DbMaterials { get; set; }

标签: entity-framework


【解决方案1】:

当您有一个字段时会发生此错误:

  • 不允许空值
  • 没有默认值
  • 您没有在插入中提供值

错误原因可能是:

  • 您正在将其中一个字段设置为空
  • 保存更改还试图保存之前添加的未显示在您发布的代码中的行。

尝试使用 SQL Profiler,您将看到哪个插入语句导致错误。

【讨论】:

  • 我不例外。这是一个发生在实体框架代码深处的异常,未被捕获。异常的原因是InternalContext.WrapUpdateException 正在调用Enumerable.Any,而source 参数中的引用为空。我验证我正确地将所有字段设置为有效值。当我手动将值输入表中时,一切正常。所以我认为问题根本不在于 SQL。
【解决方案2】:

假设您已经检查了已经提供的所有明智的建议。那么另一种可能性是你的模型和数据库不匹配。

你有没有

迁移未完成。

.. 仔细检查。我以前看过这条消息;-)

【讨论】:

  • 我的模型完美匹配。我什至尝试从头开始重建表格。没有运气。
【解决方案3】:

这是一个非常古老的线程,但我仍然会发布答案,因为我有类似的问题,但我找不到答案。也许它会帮助某人。

对我来说答案很愚蠢。我的 ID 列不是表的主键。

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 2017-02-20
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多