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

时间:2011-08-24 10:37:19

标签: c# sql-server entity-framework identity-column

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

2 个答案:

答案 0 :(得分:9)

您必须在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

答案 1 :(得分:3)

而不是:

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;
    }
}