2

我有一個CodeFirst數據庫(實體框架6)項目和兩個遷移步驟。在遷移過程中將標識設置爲先前創建的列

Database.SetInitializer(
      new MigrateDatabaseToLatestVersion<MyDBEntities, MyNamespace.Configuration>()); 

首先遷移步驟是創建的表::

CreateTable(
    "dbo.GalleryAlbum", 
     c => new 
     { 
      Id = c.Int(nullable: false), 
      //other columns..... 
     }) 
     .PrimaryKey(t => t.Id); 

CreateTable(
     "dbo.GalleryPics", 
     c => new 
     { 
      Id = c.Int(nullable: false), 
      //other columns..... 
     }) 
     .PrimaryKey(t => t.Id) 
     .ForeignKey("dbo.GalleryAlbum", t => t.AlbumId) 
     .Index(t => t.AlbumId); 

第二遷移步驟是添加的身份將所創建的表: 數據庫是通過使用在Global.asax中在此的Application_Start代碼自動更新

AlterColumn("dbo.GalleryAlbum", "Id", c => c.Int(nullable: false, identity: true)); 
AlterColumn("dbo.GalleryPics", "Id", c => c.Int(nullable: false, identity: true)); 

當我運行應用程序時,我可以看到第二個遷移代碼正在運行,關於兩個遷移的信息被添加到t他_MigrationHistory表,但兩個表中的列不會更改(沒有標識)。下面是模式:

[Id]  INT    NOT NULL, 
//other columns 

代碼優先類第一遷移如下:

public partial class GalleryAlbum 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int Id { get; set; } 
} 
//GalleryPics is the same 

,這一次第二遷移步驟:

public partial class GalleryAlbum 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
} 
//GalleryPics is the same 

你能告訴我,爲什麼身份沒有被添加到這些列以及我如何修復它?

謝謝。

更新: 生成的更新數據庫請求,這是我從IDbCommandInterceptor了:

ALTER TABLE [dbo].[GalleryAlbum] ALTER COLUMN [Id] [int] NOT NULL 
ALTER TABLE [dbo].[GalleryPics] ALTER COLUMN [Id] [int] NOT NULL 

回答

2

不能更改SQL Server中的身份一欄,看到Adding an identity to an existing column

而是試圖增加身份和列一步:

CreateTable(
     "dbo.GalleryAlbum", 
      c => new 
      { 
       Id = c.Int(nullable: false, identity:true), 
       //other columns..... 
      }).PrimaryKey(t => t.Id); 
+0

是的,它的工作原理。我有一個解決方案,以上面我的問題。但是我想知道爲什麼和什麼條件導致這個問題。 – Starina

+0

您無法在SQL Server中將列更改爲標識http://stackoverflow.com/questions/1049210/adding-an-identity-to-an-existing-column – eoghank

+0

謝謝。我希望EF6可以重新創建表格並解決此類任務。您能否將您的評論轉換爲答案或再次回覆我的問題?我想將其標記爲答案。 – Starina

0

ALTER TABLE [Mytable] add constraint [PK_dbo.Mytable]主鍵(Id)適用於我如果身份證在那裏,並有數據

相關問題