使用Guid作为PK与EF4 Code First

时间:2011-03-11 08:41:56

标签: entity-framework-4 code-first entity-framework-ctp5 ef4-code-only

我有这个班级和表格:

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和第二个,所以我得到了约束异常

有人知道修复吗?

2 个答案:

答案 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数据库,则它可以正常工作。