¿Entity Framework 4 Code First tiene soporte para generadores de identidad como NHibernate?

Esta pregunta, hecha hace un año, es similar: ¿Entity Framework 4 admite generadores para valores de id como NHibernate?

Pero lo que me gustaría saber es si el primer código CTP agrega soporte para las estrategias de generación de identidad. Si no, ¿alguien sabe un buen punto de extensión en EF para implementar algo similar?

Actualmente estoy trabajando con clases modelo que usan GUID como el identificador. Al insertar utilizando EF conservan sus valores iniciales Guid.Empty . Sé que puede establecer un valor predeterminado para la columna en el DB a newid() pero eso newid() el propósito de la generación de identidad del lado del cliente.

¿Entity Framework no está lo suficientemente maduro como para ser utilizado en un sistema distribuido, desconectado?

No, el código de Entity Framework primero sigue siendo una buena envoltura alrededor de EFv4. No hay generadores tipo NHibernate. Si desea un generador de Id del lado del cliente, deberá anular los SaveChanges de SaveChanges en DbContext derivado e implementar su propia lógica de asignación de Id. A las nuevas entidades.

Editar:

Un ejemplo de alto nivel:

 public class Context : DbContext { // Helper for example // DO NOT USE IN REAL SCENARIOS!!! private static int i = 0; public DbSet MyEntities { get; private set; } public Context() : base("connection") { MyEntities = Set(); } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity().HasKey(e => e.Id); // Turn off autogeneration in database modelBuilder.Entity() .Property(e => e.Id) .HasDatabaseGeneratedOption(HasDatabaseGeneratedOption.None); // Other mapping } public override int SaveChanges() { foreach (var entry in ChangeTracker.Entries() .Where(e => e.State == EntityState.Added)) { // Here you have to add some logic to generate Id // I'm using just static field entry.Entity.Id = ++i; } return base.SaveChanges(); } } public class MyEntity { public int Id { get; set; } // Other properties } 

No.

Mine Entity Framework 4.1.10715 instalado por NuGet. tal vez podrías usar el atributo

 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id {get;set;} 

Consulte (la lista completa de anotaciones admitidas en EF 4.1: CTRL + F en la página) aquí .

 [Key] public string Id { get; set; } 

y luego use el nuevo GUID ToString

 Units.Add( new Unit(){Id=Guid.NewGuid().ToString(), Name="123"});