首页 新闻 会员 周边 捐助

大侠们问个问题,关于Code First中给GUID赋初值的,谢了

0
悬赏园豆:20 [已解决问题] 解决于 2017-01-16 21:29

我数据库表的主键的guid类型的,在Code First中用new Guid("10D68FC0-AD6A-446D-A714-78171A1F62A4") 的方式赋了一个初值,但是保存到数据库后,这个值就变了,不一样了。。这个怎么回事啊?谢了~!

主键的定义

/// <summary>
        /// 主键
        /// </summary>
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [DisplayName("主键")]
        public Guid ID { get; set; }

众生少两千的主页 众生少两千 | 初学一级 | 园豆:1
提问于:2017-01-15 22:20
< >
分享
最佳答案
1

你的Guid设置了自动填充了,那么ef会给它自动赋值。

    Member name    Description
Computed    
The database generates a value when a row is inserted or updated.
Identity    
The database generates a value when a row is inserted.
None    
The database does not generate values.

 

所以你应该去除这个DatabaseGeneratedOption.Identity特性。

因为你现在需要手动去控制这个guid的生成。

其实按照ef的做法,它在新增一个实体会返回这个实体,你可以获得主键的

context.BlogPosts.Add(blogPost);
context.SaveChanges();
return blogPost.ID;

在被保存以后可以获取到ID的。

 

 

收获园豆:20
心雨纷扬 | 菜鸟二级 |园豆:309 | 2017-01-16 10:36

哦哦。这样啊,我晚上试下,谢了哦

众生少两千 | 园豆:1 (初学一级) | 2017-01-16 10:40

 谢谢,大侠、。。你的话提醒我了。原来我之前的初始化是错的。。谢谢

众生少两千 | 园豆:1 (初学一级) | 2017-01-16 21:27
其他回答(2)
1

搞清楚DatabaseGenerated(DatabaseGeneratedOption.Identity) 这个attribute是做什么的。

DatabaseGeneratedOption.Identity 数据库自动生成id

DatabaseGeneratedOption.None。没记错应该是这个。可以设置

czd890 | 园豆:14488 (专家六级) | 2017-01-15 22:23

如果设置成None,不自动生成的话,我下次新增数据的时候,是不是也必须的给id赋值呢?

支持(0) 反对(0) 众生少两千 | 园豆:1 (初学一级) | 2017-01-15 22:25

@众生少两千: 既然不是自增长了,当然要手动赋值。系统就是你让它这么做它才会去这么做。

或者有帮助:http://www.cnblogs.com/Gyoung/archive/2013/01/18/2865998.html

支持(0) 反对(0) 开山怪不怪 | 园豆:544 (小虾三级) | 2017-01-15 22:40

@众生少两千: 可以抽出来一个entitybase。数据库几个公共字段放这里。构造函数默认给id一个newid.

支持(0) 反对(0) czd890 | 园豆:14488 (专家六级) | 2017-01-15 23:24

@calvinK: 额,大侠,我用我之前的方法,我给code first赋初始值的时候,两张表关联,就会报错诶,说找不到那张关联得表,说目标不存在,我就是通过guid作为外键关联得,如果设置成每次都newid会不会报找不到的错呢?

支持(0) 反对(0) 众生少两千 | 园豆:1 (初学一级) | 2017-01-16 09:47

@众生少两千: 你如果要用到外键,去掉那个自动插入属性,然后使用自己生成的ID,主键外键表都使用同样的这个id,先插主键表,后插外键表。应该也是可以的。

 

或者利用ef的外键关联,直接savechanges

支持(0) 反对(0) 心雨纷扬 | 园豆:309 (菜鸟二级) | 2017-01-17 15:49
1

用guid就不用identity了.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-01-16 09:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册