2

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

4

2 回答 2

10

您必须Guid在 EF 模型中将您的 ID 指定为身份。在 EF 4.1 中:

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

Guid与 Ids 相比,默认情况下 Ids 不是身份int。)如果您使用此模型创建数据库,EF 将创建一个默认值为 的列newid()

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

于 2011-08-24T18:55:47.743 回答
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;
    }
}
于 2011-08-24T16:51:35.453 回答