используя Guid в качестве PK с EF4 Code First - PullRequest
39 голосов
/ 11 марта 2011

У меня есть этот класс и таблица:

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 ]

71 голосов
/ 11 марта 2011

Вы установили 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;}
}
16 голосов
/ 20 февраля 2012

Просто опираясь на решение Devart, у меня возникла эта проблема, и использование аннотации данных

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

не работало.Причиной этого было то, что я использовал (как предложено в одном из первых руководств по коду) базу данных SqlServerCompact, которая не поддерживает Guid как идентификатор.Просто подумал, что я опубликую здесь на случай, если кто-то еще имеет эту проблему.Если вы измените строку подключения, создавая SqlServer mdf вместо компактной базы данных, она будет работать отлично.

...