我正在从现有的模型和数据库转向Entity Framework.在该数据库中,有几个表具有GUID列,这些表不是主键(或根本不是键!).每个表都有一个ID列. GUID列具有在其上定义的ROWGUIDCOL属性,以及DEFAULT(newid()).
现在,当我插入数据库时,我得到了这个列的所有零.
我尝试过使用数据注释:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Guid {get; set;}
这个问题是它丢弃了我的ID列上的标识属性(并给我插入错误).除此之外,我注意到对于以下迁移,EF实际上为up和down方法生成了相同的SQL:
public override void Up()
{
AlterColumn("dbo.Client", "Guid", c => c.Guid(nullable: false, identity: true));
}
public override void Down()
{
AlterColumn("dbo.Client", "Guid", c => c.Guid(nullable: false));
}
用生成的sql:
ALTER TABLE [dbo].[Client] ALTER COLUMN [Guid] [uniqueidentifier] NOT NULL
为什么上面的迁移为两个语句创建了相同的sql?如何让EF生成GUID?我可以/必须在客户端(代码)空间中执行此操作吗?如果必须,我怎样才能保证表格的唯一性?