实体框架代码优先与 Guid
Posted
技术标签:
【中文标题】实体框架代码优先与 Guid【英文标题】:Entity Framework Code First versus Guid 【发布时间】:2012-04-20 13:13:36 【问题描述】:在我的简单类中,我使用数据注释将属性映射到列:
[Table("Member")]
public class Member
[Key]
public Guid MemberId get; set;
// More properties go here
我已经可以将新成员写入我的表,但 MemberId 始终默认为新的 Guid (0000-000-00...),而不是漂亮的服务器生成的 Guid。
我见过人们在 EDMX 文件中更改一些名为 StoreGeneratedPattern 的设置。但是由于我使用的是 Code First 显然我没有这个 EDMX 文件...
那么我该如何解决这个问题呢?
非常感谢任何帮助。
更新!!
好的,我自己找到了答案。您可以使用注释。
[Table("Member")]
public class Member
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid MemberId get; set;
// More properties go here
【问题讨论】:
using Guid as PK with EF4 Code First 的可能重复项 【参考方案1】:使用注释:
[Table("Member")]
public class Member
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid MemberId get; set;
// More properties go here
【讨论】:
【参考方案2】:我一直在类构造函数中初始化我的 Guid,因为您不需要/不能使用与 int 类型键一起使用的自动增量功能。
所以,我会改成……
[Table("Member")]
public class Member
[Key]
public Guid MemberId (get; set;
public Member
MemberId = Guid.NewGuid();
【讨论】:
如果使用这种方法,在保存对上下文的更改时如何处理 Guid 的唯一性?以上是关于实体框架代码优先与 Guid的主要内容,如果未能解决你的问题,请参考以下文章
实体框架代码优先:迁移失败并更新数据库,强制不必要的(?)添加迁移
实体框架代码优先 MaxLength 和 FixedLegth(char 与 varchar)