2013-02-21 59 views
1

this thread中的答案對我無效。EF 5將不會將IsIdentity的PK屬性設置爲false

我把這個註釋放在我的客戶類中的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

你沒有做錯什麼。這是遷移的一個限制(或者可能被認爲是bug),因爲SQL Server不允許在現有列上更改IDENTITY。它只能在新列上設置。如果您在management studio中更改身份值,它將在內部執行一些涉及臨時表和大量數據操作的複雜SQL批處理。

最簡單的解決方案是刪除數據庫並從初始遷移中刪除標識定義。否則,請使用SQL事件探查器查看在更改列的標識值時使用SQL管理工作室正在執行的操作,並在遷移中使用該SQL而不是AlterColumn

1

EF將Id字段視爲PK,並且PK必須具有唯一值。 Identity Specification的含義。 Table Column Properties

設置DatabaseGeneratedOption.None只指定Id不會由數據庫引擎生成,您將不得不提供它(我認爲這不是一個好主意)。

+0

爲什麼它不是一個好主意?我已經繪製了舊數據的映射圖,大約有5萬個客戶(公司最近50年)。但是,Ids範圍從0-999999。有巨大的差距。我不希望讓數據庫自動生成B/C,然後當有950,000個可用的6位數ID時,我將進入7位數的客戶ID。因此,我從0開始,找到下一個可用的Id,分配它並插入新記錄。合理? – BBauer42 2013-02-21 15:25:30

相關問題