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