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

本文关键字:记录 EF 返回 Guid 作为 0000-0000-0000-xxx 保存 新记录 更新 | 更新日期: 2023-09-27 18:06:35

我在c#项目中使用EF4。我面临的问题是,当我试图保存一条记录时,我得到一个Primary Key Violation,并且PK值为"0000-0000-0000-xxx"。根据我的猜测,EF不能识别IsIdentity标志并生成一个指导值。在我的SQL Server数据库中,我为我的表指定了一个PK(uniqueidentifier>guid),并将其设置为IdentityColumn,因此我希望它能够传递到我的项目中,因为guid是在SQL Server中生成的。有没有办法克服这个bug?

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

您必须在EF模型中指定您的Guid ID作为Identity。在EF 4.1:

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

(与int id相反,Guid 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;
    }
}