1

對於EF 6.1以上,當我在VS15添加/ 逆向工程的實體模型,模型/代碼生成 &的SQL服務器2k16數據庫我的實體缺少兩個編號,並自動增加數據註釋Saw thisthis關於SO的問題,但沒有答案,只是它的一個錯誤,我正在尋找一個選項來生成PK Key,Auto Increment。EF數據庫第一代碼生成缺少密鑰和數據註解

問:我怎麼能保證,該ID鍵&自動遞增的選項被添加到實體代碼生成期間?除了外鍵以外,沒有數據註釋!我也可以讓EF生成複合鍵嗎?

我做什麼: 在數據庫中,我添加了設置主鍵上[Id]山坳爲int, 我還設置Identity trueseed 1auto increment 1

例如丟失的主鍵


//E.g. Reverse Eng. Generated code from ASP table 
public partial class AspNetUsers 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public AspNetUsers() 
    { 
     this.AspNetUserClaims = new HashSet<AspNetUserClaims>(); 
     this.AspNetUserLogins = new HashSet<AspNetUserLogins>(); 
     this.AspNetRoles = new HashSet<AspNetRoles>(); 
    } 
    // Missing Primary Key 
    public string Id { get; set; } 
    public Nullable<int> IdNumber { get; set; } ... 

例如2 缺少兩個主鍵&自動遞增

public partial class AuditNetEvent 
{ 
    //Reverse Generated code missing Primary Key & Auto Increment 
    public bigint Id { get; set; } 
    public System.DateTime InsertedDate { get; set; } 
+1

當我反向設計我的數據庫爲代碼第一類,它創建的POCO類,而註釋和模型類與上下文,dbsets和流利的代碼(OnModelCreating)來定義所有選定表的鍵,關係等。 –

+0

@SteveGreene如果我理解正確,這是默認行爲,對嗎?我檢查了'DbMode.Context'它創建集合良好,但沒有鍵保護覆蓋無效OnModelCreating(DbModelBuilder modelBuilder) { {0}丟棄新的UnintentionalCodeFirstException(); }' - 我怎樣才能在那裏? – transformer

+0

我調整了[代碼生成模板](https://www.nuget.org/packages/EntityFramework.CodeTemplates.CSharp/),如[這裏]所述(https://entityframework.codeplex.com/workitem/2241) 。 –

回答

1

看來這個工具不添加註釋時,默認的慣例讓他們多餘的。對於Id列,默認值是它是PK和身份。我試圖用一個表不匹配的約定(偏離PK列名,沒有身份),並添加註釋:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.None)] 
public int CstId { get; set; } 
+0

哦,太棒了:)以後所有的搜索它的道岔會議結束!猜我應該感到高興。我認爲'ID'作爲Pk ID是有意義的,但是,所有ID cols默認都帶有'[DatabaseGenerated(DatabaseGeneratedOption.None)]'謝謝。將標記爲答案! – transformer