我数据库表的主键的guid类型的,在Code First中用new Guid("10D68FC0-AD6A-446D-A714-78171A1F62A4") 的方式赋了一个初值,但是保存到数据库后,这个值就变了,不一样了。。这个怎么回事啊?谢了~!
主键的定义
/// <summary>
/// 主键
/// </summary>
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DisplayName("主键")]
public Guid ID { get; set; }
你的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的。
哦哦。这样啊,我晚上试下,谢了哦
谢谢,大侠、。。你的话提醒我了。原来我之前的初始化是错的。。谢谢
搞清楚DatabaseGenerated(DatabaseGeneratedOption.Identity) 这个attribute是做什么的。
DatabaseGeneratedOption.Identity 数据库自动生成id
DatabaseGeneratedOption.None。没记错应该是这个。可以设置
如果设置成None,不自动生成的话,我下次新增数据的时候,是不是也必须的给id赋值呢?
@众生少两千: 既然不是自增长了,当然要手动赋值。系统就是你让它这么做它才会去这么做。
或者有帮助:http://www.cnblogs.com/Gyoung/archive/2013/01/18/2865998.html
@众生少两千: 可以抽出来一个entitybase。数据库几个公共字段放这里。构造函数默认给id一个newid.
@calvinK: 额,大侠,我用我之前的方法,我给code first赋初始值的时候,两张表关联,就会报错诶,说找不到那张关联得表,说目标不存在,我就是通过guid作为外键关联得,如果设置成每次都newid会不会报找不到的错呢?
@众生少两千: 你如果要用到外键,去掉那个自动插入属性,然后使用自己生成的ID,主键外键表都使用同样的这个id,先插主键表,后插外键表。应该也是可以的。
或者利用ef的外键关联,直接savechanges
用guid就不用identity了.