这里没有实际代码 我只是放个demo
Configuration中配置
this.Property(p => p.DishCode).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
------------------------------------------------------
DbMigration 生成相应代码
AddColumn("Group_tGroupDishInfo", "DishCode", c => c.Short(nullable: false, defaultValue: 0, identity: true));
------------------------------------------------------
但是数据库中
标识规范 否
------------------------------------------------------
本人用的 。net framework 4.0
entityframework 5.0
我只是期望吧某个非主键字段设置为自增 该如何设置? 以上设置反正是失败了?当然也有替代的方案 就是自己 在DbMigration 写sql语句 但是我想知道的是 ef 内部的解决方案
EF6.0 直接挂特性 DatabaseGeneratedOption.Identity
你自己去试试 好像是不可以的!
我是5.0
public override void Up() { AlterColumn("dbo.Group_tGroupDishInfo", "DishCode", c => c.Int(nullable: false, identity: true)); Sql(@" alter table Group_tGroupDishInfo drop column DishCode alter table Group_tGroupDishInfo add DishCode int identity(1,1)"); }
根据面条的回复 这个位置肯定是 ef5的一个bug了
不过5里面可以通过以上代码修复!
@小眼睛老鼠: EF5也行吧
[Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ID { set; get; }
我就是这么用的
@苦逼面条: 我不是主键字段
@小眼睛老鼠: 是不是主键无关好么
@苦逼面条: [Key]
你吧这个标记去掉试试!
@苦逼面条:
理论上来说
你的[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
和我的这个
this.Property(p => p.DishCode).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
意义是一样的
至于你说的 那种 我其实也试过 主键是肯定可以的 这个我也做过
只不过非主键 现在出这个问题了
@小眼睛老鼠: 你试一试code first 生成数据库看一看 我怀疑是你设置了 model 的自增 但是 没有设置数据的自增 你能把异常发我看看么 你model设置自增数据库不设置自动增长一样没有用 这个映射的原理就是 放弃你这个字段 只不过 还对它保留了追踪功能 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 和 [NotMapped] 还是有区别的 你在添加 或者 修改记录后能追踪到数据最终状态
@苦逼面条: 我是没设置啊 这个是必然的啊
因为code first 的理念是 通过model去生成 database 那么model改变了
只要add-Migration 那么 数据库也应该跟着改变 自动生成修改相关的代码
但是实际上 没有生成修改相关的代码 所以我才说这个是bug
同求!
我尝试了下,确实没办法达到这个目的。
public override void Up() { AlterColumn("dbo.Group_tGroupDishInfo", "DishCode", c => c.Int(nullable: false, identity: true)); Sql(@" alter table Group_tGroupDishInfo drop column DishCode alter table Group_tGroupDishInfo add DishCode int identity(1,1)"); }
根据面条的回复 这个位置肯定是 ef5的一个bug了