我正在使用EF迁移创建表格,例如:
this.CreateTable("Message",
c => new
{
Id = c.Long(nullable: false, identity: true, defaultValue: 0),
Subject = c.String(nullable: false, maxLength: 64),
Body = c.String(nullable: false, isMaxLength: true)
})
.PrimaryKey(c => c.Id)
.Index(c => c.Id, unique: true);
如何将Id字段定义为auto_increment?我很确定它必须是可能的,但我只是在努力寻找......
感谢。
答案 0 :(得分:3)
好的,似乎在字段中设置属性“identity:true”应该足够了,但由于某种原因,该字段未定义为IDENTITY(1,1)。
在这篇文章中找到了一个解决方法:
这对我有用:
Id = new ColumnModel(PrimitiveTypeKind.Int64) { IsNullable = false, IsIdentity = true },
现在它将列定义为IDENTITY(1,1)
答案 1 :(得分:1)
如果您确实想在代码中自动生成它,可以跳过Id字段上的注释并执行以下操作。
public abstract class AbstractContext : DbContext {
/// <summary>
/// Custom processing when saving entities in changetracker
/// </summary>
/// <returns></returns>
public override int SaveChanges()
{
// recommended to explicitly set New Guid for appropriate entities
foreach (var entry in ChangeTracker.Entries<ModelBase>().Where(e => e.State == EntityState.Added) ) {
// only generate if property isn't identity...
Type t = entry.Entity.GetType();
var info = t.GetProperty("Id").GetCustomAttributes(
typeof(DatabaseGeneratedAttribute), true).Cast<DatabaseGeneratedAttribute>().Single();
if (info.DatabaseGeneratedOption != DatabaseGeneratedOption.Identity) {
entry.Entity.Id = Guid.NewGuid(); // now we make it
}
}
return base.SaveChanges();
}
}
有关详细信息,请查看Working with Entity Keys
我从上面显示的评论链接中得到了这个。
我希望这会对你有所帮助。