SQL Server Sequential Guid в качестве ключа при использовании Entity Framework Code First

Я хочу использовать EF4 для сопоставления объекта с таблицей с последовательным идентификатором в виде PK. Согласно этому сообщению http://leedumond.com/blog/using-a-guid-as-an-entitykey-in-entity-framework-4/ EF4 поддерживает это, но с сопоставлением edmx. Есть ли способ использовать сгенерированные сервером Guids при использовании EF4 Code First, и если да, то как?


person Stilgar    schedule 17.03.2011    source источник


Ответы (1)


Да, вы должны сопоставить свое свойство Key. Предположим, у вас есть объект вроде:

public class MyEntity
{
    public virtual Guid Key { get; set; }
    ...
}

Затем вы можете определить производный класс DbContext, например:

public class Context : DbContext
{
    public DbSet<MyEntity> MyEntities { get; private set; }

    public Context()
        : base("connection")
    {
        MyEntities = Set<MyEntity>();
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    { 
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<MyEntity>().HasKey(e => e.Key);
        modelBuilder.Entity<MyEntity>()
                    .Property(e => e.Key)
                    .HasDatabaseGeneratedOption(DatabaseGenerationOption.Identity);

        // Other mapping
    }
}

Или вы можете просто определить свою сущность с помощью аннотаций данных:

public class MyEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual Guid Key { get; set; }
    ...
}

Изменить:

Это работает, если сопоставление используется с существующей базой данных, но если вы хотите, чтобы EF code-first создал для вас базу данных, он будет использовать обычные (не последовательные) направляющие! Отметьте этот вопрос для возможных решений в случае создания базы данных.

person Ladislav Mrnka    schedule 17.03.2011