当我尝试保存新记录或更新现有记录时,EF将0000-0000-0000-xxx作为Guid返回?

我在我的C#项目中使用EF4。 我遇到的问题是,当我尝试保存记录时,我收到主键违规,PK值为“0000-0000-0000-xxx”。 根据我的猜测,EF无法识别IsIdentity标志并生成guid值。 在我的表的SQL Server数据库中,我指定了一个PK(uniqueidentifier> guid)并将其设置为IdentityColumn,因此我希望这可以直接进入我的项目,因为在SQL Server中生成了guid。 有没有办法克服这个错误?

您必须在EF模型中将Guid ID指定为标识。 在EF 4.1中:

 [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid Id { get; set; } 

(默认情况下, Guid ID不是标识符,与int ID相反。)如果使用此模型创建数据库,EF将创建一个默认值为newid()

在EF 4.0中,您可以转到模型设计器,在设计器中标记您的Id属性,打开属性窗口,然后将StoreGeneratedPattern设置为Identity

而不是这个:

 public System.Guid ID { get; set; } 

试试这个:

 private System.Guid _id; public System.Guid ID { get { if (_id == null || _id == Guid.Empty) _id = Guid.NewGuid(); return _id; } set { _id = value; } }