我知道這不是最理想的解決辦法,但我需要一個自動遞增字段添加到我的EF代碼優先目標之一。此列ID不是該ID,這是一個GUID。實體框架自動遞增場,這是不是ID
反正對我來說,在代碼中定義的自動遞增的字段,或將創建自己的列,並在DB界定它的自動遞增的工作?
我知道這不是最理想的解決辦法,但我需要一個自動遞增字段添加到我的EF代碼優先目標之一。此列ID不是該ID,這是一個GUID。實體框架自動遞增場,這是不是ID
反正對我來說,在代碼中定義的自動遞增的字段,或將創建自己的列,並在DB界定它的自動遞增的工作?
您可以標註該屬性與DatabaseGenerated(DatabaseGeneratedOption.Identity)
。 EF僅允許每個表單一個標識列。
public class Foo
{
[Key]
public Guid Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Bar { get; set; }
}
老後期以爲我會分享我發現與實體框架6.1.3。
我創建使用C#和.NET Framework 4.6.1一個簡單的數據層庫,增加了一個簡單的存儲庫/服務類,代碼第一上下文類,並指出我的web.config文件到本地的SQL Express 2014數據庫。
在實體類添加以下屬性構造的id列:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
然後創建通過鍵入新移民在Visual Studio 2015年包管理器執行以下操作:
添加遷移
給遷移的名稱,然後等待要創建的DbMigtation類。編輯類並添加以下CREATETABLE操作:
CreateTable(
"dbo.Article",
c => new
{
Id = c.Guid(nullable: false, identity: true),
Title = c.String(),
Content = c.String(),
PublishedDate = c.DateTime(nullable: false),
Author = c.String(),
CreateDate = c.DateTime(nullable: false),
})
.PrimaryKey(t => t.Id);
}
上表是一個例子這裏的關鍵點是以下製造商註釋:
nullable: false, identity: true
這告訴EF到specifiy列不nullabe並且您想將其設置爲由EF進行播種的標識列。
用下面的命令再次運行遷移:
update-database
這將運行遷移類第一刪除表(向下()方法),然後在創建表(向上()方法)。
運行你的單元測試和/或連接到數據庫並運行一個select查詢,你應該看到你的表在新窗體中,添加一些數據,不包括Id列,你應該看到新的Guid(或者你選擇的任何數據類型)被生成。
我見過的DatabaseGeneratedOption.Identity但TBH我一直偷懶,說好的讀到它,我只是認爲它使該列的PKEY領域。 謝謝,我會放棄它。 – JamesStuddart
這是否仍然適用於Multitenant數據庫? – amd
@Ahmad如果每個房客都有自己的種子,它將無法工作 – Eranga