不,实体框架代码优先仍然是EFv4的不错包装。没有像NHibernate这样的生成器。如果要使用客户端Id生成器,则必须重写
SaveChangesind
DbContext并实现将ID分配给新实体的自己的逻辑。
编辑:
一些高级示例:
public class Context : DbContext{ // Helper for example // DO NOT USE IN REAL SCENARIOS!!! private static int i = 0; 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.Id); // Turn off autogeneration in database modelBuilder.Entity<MyEntity>() .Property(e => e.Id) .HasDatabaseGeneratedOption(HasDatabaseGeneratedOption.None); // Other mapping } public override int SaveChanges() { foreach (var entry in ChangeTracker.Entries<MyEntity>() .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}


