EF 5不会将IsIdentity的PK属性设置为false

时间:2013-02-21 14:45:02

标签: entity-framework

this thread中的答案对我不起作用。

我把这个注释放在我的客户类中的PK上。

public class Customer
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
}

数据库迁移会创建一个配置,显示新添加的数据注释的这一行:

AlterColumn("dbo.Customers", "Id", c => c.Int(nullable: false));

我运行迁移并查看SQL Server Management Studio中的表。客户标识列仍具有标识规范是和标识是。我究竟做错了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

你没有做错任何事。这是迁移的限制(或者可能被视为错误),因为SQL Server不允许在现有列上更改IDENTITY。它只能在新列上设置。如果在管理工作室中更改标识值,它将在内部执行一些涉及临时表和大量数据操作的复杂SQL批处理。

最简单的解决方案是删除数据库并从初始迁移中删除身份定义。否则,在更改列的标识值时使用SQL事件探查器查看SQL管理工作室正在执行的操作,并在迁移中使用该SQL而不是AlterColumn

答案 1 :(得分:1)

EF将Id字段视为PK,PK必须具有唯一值。这就是身份规范的含义。 Table Column Properties

设置DatabaseGeneratedOption.None仅指定数据库引擎不会生成Id,您必须提供它(我认为这不是一个好主意)。