我一直收到这个错误:
无法将值NULL插入列'Id',表中 'database.dbo.Employees';列不允许空值。插入 失败。\ r \ n声明已经终止。
但该对象的此属性设置为Guid.NewGuid()
我使用Entity Framework 4.1和.net framework 4.0。
列是主键,不是null。我没有使用Code First方法。
编辑:如果我手动编辑文件edmx,似乎运行自定义工具不会更新文件。
答案 0 :(得分:3)
如果您已使用Fluent API或数据注释将键属性标记为模型中的自动生成标识,则会发生这种情况......
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
...(其效果是EF不会将Id
值发送到数据库,因为它期望在那里生成密钥)但是在数据库表中没有指定默认值Id
列的值为newid()
,因此数据库不会生成新密钥。
我想手动将Guid
值从客户端发送到数据库,从模型中删除DatabaseGeneratedOption.Identity
规范。
答案 1 :(得分:0)
导致错误的问题是运行自定义工具没有完全更新实体。来自SQL的插入工作,所以我尝试从Slauma建议的更改和实体的其他更改中恢复。