我有这个班级和表格:
public class Foo
{
public Guid Id {get;set;}
public string Name {get;set;}
}
create table Foo
(
id uniqueidentifier primary KEY DEFAULT (newsequentialid()),
name nvarchar(255)
)
问题是,当我尝试保存新的foo时,第一个使用了0000-000-00 ... id和第二个,所以我得到了约束异常
有人知道修复吗?
答案 0 :(得分:71)
您是否设置了Identity StoreGeneratedPattern?
您可以使用OnModelCreating
方法执行此操作:
modelBuilder.Entity<Foo>().Property(o => o.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
或使用DataAnnotation属性:
public class Foo {
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id {get;set;}
public string Name {get;set;}
}
答案 1 :(得分:16)
刚刚开发Devart的解决方案,我遇到了这个问题并使用了
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
数据注释不起作用。原因是我正在使用(如代码第一个教程之一中所建议的)一个SqlServerCompact数据库,它不支持Guid作为标识。只是想我会发布在这里以防其他人有这个问题。如果更改连接字符串以便创建SqlServer mdf而不是Compact数据库,则它可以正常工作。