использование Guid как PK с EF4 Code First

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

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, а второй также, поэтому я получаю исключение ограничения

кто-нибудь знает исправление?


person Omu    schedule 11.03.2011    source источник


Ответы (2)


Вы установили 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;}
}
person Devart    schedule 11.03.2011

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

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

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

person Manatherin    schedule 20.02.2012
comment
Какую версию Compact Edition и EF вы использовали? Кажется, с CE 4.0 и EF 6 все в порядке. Была ли эта проблема решена в последующих версиях CE? - person mack; 23.01.2014
comment
@mack это, вероятно, было решено тогда, мой пост был пару лет назад :) - person Manatherin; 23.01.2014
comment
@Manatherin Я столкнулся с этой проблемой сейчас в VS2013 Update 2 с EF 6.1.0. - person a.farkas2508; 21.05.2014