我有一個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
是的,它的工作原理。我有一個解決方案,以上面我的問題。但是我想知道爲什麼和什麼條件導致這個問題。 – Starina
您無法在SQL Server中將列更改爲標識http://stackoverflow.com/questions/1049210/adding-an-identity-to-an-existing-column – eoghank
謝謝。我希望EF6可以重新創建表格並解決此類任務。您能否將您的評論轉換爲答案或再次回覆我的問題?我想將其標記爲答案。 – Starina