EF 4.1 Null插入的GUID非空

时间:2012-10-27 12:12:12

标签: .net entity-framework-4.1

我一直收到这个错误:

  

无法将值NULL插入列'Id',表中   'database.dbo.Employees';列不允许空值。插入   失败。\ r \ n声明已经终止。

但该对象的此属性设置为Guid.NewGuid()

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

列是主键,不是null。我没有使用Code First方法。

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

2 个答案:

答案 0 :(得分:3)

如果您已使用Fluent API或数据注释将键属性标记为模型中的自动生成标识,则会发生这种情况......

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

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

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

答案 1 :(得分:0)

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