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