39

我有这个类和表:

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 一起使用,第二个也是,所以我得到约束异常

有人知道解决办法吗?

4

2 回答 2

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;}
}
于 2011-03-11T08:53:45.163 回答
17

只是在 Devart 的解决方案上构建,我遇到了这个问题并使用

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

数据注释不起作用。这样做的原因是我正在使用(如代码优先教程之一中所建议的)一个不支持将 Guid 作为身份的 SqlServerCompact 数据库。只是想我会在这里发帖,以防其他人遇到这个问题。如果您更改连接字符串以创建 SqlServer mdf 而不是 Compact 数据库,则它可以完美运行。

于 2012-02-20T16:10:32.370 回答