首页 新闻 搜索 专区 学院

Ef DbMigration 非主键字段 怎么设置为自增?

0
悬赏园豆:30 [已解决问题] 解决于 2014-09-25 14:30

这里没有实际代码 我只是放个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 内部的解决方案

小眼睛老鼠的主页 小眼睛老鼠 | 老鸟四级 | 园豆:2774
提问于:2014-09-24 17:04
< >
分享
最佳答案
0

EF6.0 直接挂特性 DatabaseGeneratedOption.Identity

收获园豆:15
苦逼面条 | 菜鸟二级 |园豆:289 | 2014-09-24 19:47

你自己去试试 好像是不可以的!

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2014-09-25 13:56

我是5.0

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2014-09-25 13:56
 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了 

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2014-09-25 14:31

不过5里面可以通过以上代码修复!

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2014-09-25 14:31

@小眼睛老鼠: EF5也行吧

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

我就是这么用的

苦逼面条 | 园豆:289 (菜鸟二级) | 2014-09-25 15:28

@苦逼面条:  我不是主键字段

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2014-09-25 17:35

@小眼睛老鼠: 是不是主键无关好么

苦逼面条 | 园豆:289 (菜鸟二级) | 2014-09-26 08:44

@苦逼面条: [Key]

你吧这个标记去掉试试!

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2014-09-26 09:17

@苦逼面条: 

理论上来说

你的[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

和我的这个

this.Property(p => p.DishCode).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

意义是一样的

至于你说的 那种 我其实也试过 主键是肯定可以的 这个我也做过

只不过非主键 现在出这个问题了

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2014-09-26 09:19

@小眼睛老鼠:  你试一试code first 生成数据库看一看   我怀疑是你设置了 model 的自增 但是 没有设置数据的自增 你能把异常发我看看么   你model设置自增数据库不设置自动增长一样没有用 这个映射的原理就是 放弃你这个字段 只不过 还对它保留了追踪功能  [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 和 [NotMapped] 还是有区别的 你在添加 或者 修改记录后能追踪到数据最终状态

苦逼面条 | 园豆:289 (菜鸟二级) | 2014-09-29 14:38

@苦逼面条: 我是没设置啊 这个是必然的啊

因为code first 的理念是 通过model去生成 database 那么model改变了

只要add-Migration 那么 数据库也应该跟着改变 自动生成修改相关的代码

但是实际上 没有生成修改相关的代码 所以我才说这个是bug

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2014-10-20 09:54
其他回答(2)
0

同求!

我尝试了下,确实没办法达到这个目的。 

收获园豆:15
519740105 | 园豆:5810 (大侠五级) | 2014-09-24 17:14
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了 

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2014-09-25 14:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册