使用Guid作为PK与EF4 Code First

Omu*_*Omu 39 code-first entity-framework-4 ef4-code-only entity-framework-ctp5

我有这个班级和表格:

public class Foo
{
public Guid Id {get;set;}
public string Name {get;set;}   
}
Run Code Online (Sandbox Code Playgroud)
create table Foo
(
id uniqueidentifier primary KEY DEFAULT (newsequentialid()),
name nvarchar(255)
)
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试保存新的foo时,第一个使用了0000-000-00 ... id和第二个也是,所以我得到了约束异常

有谁知道修复?

Dev*_*art 71

你有没有设置Identity StoreGeneratedPattern?
你可以在OnModelCreating方法中做到:

modelBuilder.Entity<Foo>().Property(o => o.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Run Code Online (Sandbox Code Playgroud)

或使用DataAnnotation属性:

public class Foo {
  [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  public Guid Id {get;set;}
  public string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)


Man*_*rin 16

刚刚开发Devart的解决方案,我遇到了这个问题并使用了

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
Run Code Online (Sandbox Code Playgroud)

数据注释不起作用.原因是我正在使用(如代码第一个教程之一中所建议的)一个SqlServerCompact数据库,它不支持Guid作为标识.只是想我会发布在这里以防其他人有这个问题.如果更改连接字符串以便创建SqlServer mdf而不是Compact数据库,则它可以正常工作.