没有,实体框架代码优先仍然是围绕EFv4刚刚好包装。没有像生成器那样的NHibernate。如果你想客户端ID生成器,你将不得不覆盖衍生DbContext
SaveChanges
和实现自己的新实体将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
}
好问题.. – 2011-03-11 16:05:56
的EntityFramework 4.0是从1.0前进了一大步,但它仍然是另一半烤微软执行。可扩展性指向几乎没有。 – Jeff 2011-03-11 16:07:01
@Jeff,虽然我很欣赏你的意见(我的是相似的,我更喜欢NH),对于这个特殊的项目,我没有使用别的余地。 – joshperry 2011-03-11 16:08:51