实体框架代码优先与 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的主要内容,如果未能解决你的问题,请参考以下文章

实体框架代码优先迁移忽略 [Key] 并强制复合键

在实体优先迁移中为新Guid列添加默认值

实体框架代码优先:迁移失败并更新数据库,强制不必要的(?)添加迁移

实体框架代码优先 MaxLength 和 FixedLegth(char 与 varchar)

实体框架代码优先 - Fluent Api 与数据注释的优缺点 [关闭]

有没有人将实体框架与代码优先方法与 Edmx 文件混合使用?