EF 4.1 CodeFirst 与 Guid(不是由 DB/Store 生成)作为 PK

Posted

技术标签:

【中文标题】EF 4.1 CodeFirst 与 Guid(不是由 DB/Store 生成)作为 PK【英文标题】:EF 4.1 CodeFirst with Guid (not generated by DB/Store) as PK 【发布时间】:2011-08-24 21:56:13 【问题描述】:

我想创建一个以“客户端生成”GUID 作为主键的模型。我希望自动生成 Guid,但不在数据库上,所以我在持久化之前知道 ID,这对我的域模型很重要。

如何设置:

class MyEntity 
    public Guid ID  get; set; 

所以我可以做...

 var newEntity = new MyEntity();
 transmitIDBeforePersisting(newEntity.ID);
 context.MyEntities.Add(newEntity);
 context.SaveChanges()

如何设置 MyEntity.ID 以便在我调用 new 时自动生成它,但仍可作为主键正常工作,具有导航属性等?

这类似于using Guid as PK with EF4 Code First,但不是由 Store/DB 生成的。

【问题讨论】:

也许这个 5 小时前的回答对你有帮助:***.com/questions/7174065/… 【参考方案1】:

在构造函数中设置ID 属性的值,并在ID 属性上使用[DatabaseGenerated(DatabaseGeneratedOption.None)] 属性:

public class MyEntity 
        
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public Guid ID  get; set; 

    public MyEntity()
    
        ID = Guid.NewGuid();
    

【讨论】:

@seth 您可能还需要使用[Key] 属性。 对于 EF fluent API,请参见:dailywebtips.blogspot.com/2012/09/…

以上是关于EF 4.1 CodeFirst 与 Guid(不是由 DB/Store 生成)作为 PK的主要内容,如果未能解决你的问题,请参考以下文章

EF-CodeFirst-2玩的嗨

使用EF 4.1的DbContext的方法大全

使用 EF 4.1 部署数据库更改

EF 4.1 Code First - 我应该使用啥模式?

EF 4.1:使用 Fluent 映射从 Code First 中查找关键属性类型

当使用带有 EF 4.1 Code First 的 ASP.NET MVC 3 时,我只能编辑主表,我做错了啥?