我有我用我的所有實體的基礎的實體基類的7個數據註解支持不會出現[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
實體框架[DatabaseGenerated(DatabaseGeneratedOption.Identity)]在Guid類型主鍵
有什麼影響。
創建的遷移有類似下面的CreateTable方法:
columns: table => new
{
Id = table.Column<Guid>(nullable: false),...
這應該是:
Id = c.Guid(nullable: false, identity: true),...
是[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
在實體框架7不再支持?或者我錯過了什麼?
這是一個從EF6稍微令人失望的變化。無論如何,現在有必要進行遷移以將ID列上的「默認值或綁定」屬性設置爲(newsequentialid()) - EF6用於的方式? – John
@John - 對於啓用了值生成的Guid類型的屬性,EF7使用與newsequentialid()相同的算法生成新的客戶端值。所以即使屬性'Default Value or Binding'沒有設置,行爲也應該保持不變。 如果要強制服務器,而不是生成生成它們的客戶端的值,可以使用以下在'OnModelCreating'方法代碼: 'modelBuilder.Entity().Property(E => e.Id)。 HasDefaultValueSql(「newsequentialid()」);' 這將設置服務器上的默認值或綁定屬性爲'newsequentialid()'。 –
Smit
很酷,謝謝。我已經測試過這種方法。但是,雖然數據庫沒有生成密鑰,但我遇到了將實體添加到數據庫的問題,主密鑰由數據庫設置,但是EF隨後嘗試使用自己生成的密鑰更改該密鑰。導致我的實體庫拋出無效操作異常,如上面的代碼所示。現在我已經回到EF 6了,在嘗試認真使用它之前,我會多玩一點EF7。 – John