【问题标题】:EF 4.1 Null inserted GUID which is not nullEF 4.1 Null 插入的 GUID 不为空
【发布时间】:2012-10-17 11:52:45
【问题描述】:

我不断收到此错误:

无法将值 NULL 插入到表的“Id”列中 'database.dbo.Employees';列不允许空值。插入 失败。\r\n语句已终止。

但是对象的这个属性设置为Guid.NewGuid()

我使用 Entity Framework 4.1 和 .net framework 4.0。

该列是主键且不为空。我没有使用 Code First 方法。

编辑:如果我手动编辑文件 edmx,运行自定义工具似乎不会更新文件。

【问题讨论】:

    标签: .net entity-framework-4.1


    【解决方案1】:

    如果您在模型中使用 Fluent API 或数据注释将密钥属性标记为自动生成的身份,则可能会发生这种情况...

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    

    ...(其效果是 EF 不会将 Id 值发送到数据库,因为它希望在那里生成密钥)但是在您的数据库表中,您没有指定默认值Id 列是 newid(),因此数据库不会生成新密钥。

    如果您想手动将 Guid 值从客户端发送到数据库,请从您的模型中删除 DatabaseGeneratedOption.Identity 规范。

    【讨论】:

    • 我发现了问题,但您建议的答案不是问题。
    • 我会为你在 EF 中教给我一些新东西而给 +1。但似乎如果我手动编辑文件,运行自定义工具将无法正确更新实体
    【解决方案2】:

    导致错误的问题是运行自定义工具没有完全更新实体。 SQL 的插入有效,因此我尝试从 Slauma 建议的更改和实体的其他更改中恢复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      相关资源
      最近更新 更多