2017-10-18 83 views
0

所以我改變了我的數據庫,並重新編寫它們。我遵循EF6教程,但在嘗試創建帶有視圖的控制器時遇到此錯誤。我對錯誤進行了一些研究,人們說要添加數據註釋,我嘗試了[密鑰],但我一直得到相同的錯誤。不知道我是否忘記了什麼?謝謝!AspNet EF6 - 實體類型沒有定義密鑰

「運行選定代碼生成器時出錯:'無法檢索'LinkDB.Models.Identifier'的元數據。無法確定類型'LinkDB.Models.Identifier'和'LinkDB.Models.Identity'之間關聯的主要端點,此關聯的主要端點必須使用關係流暢API或數據註釋進行明確配置。

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 

namespace LinksDB.Models 
{ 
    public class Identity 
    { 
     [Key] 
     public int ID { get; set; } 

     public int IdentifierID { get; set; } 
     public string contact { get; set; } 
     public string contactname { get; set; } 
     public string price { get; set; } 

     public virtual ICollection<Link> Links { get; set; } 
     public virtual Identifier Identifiers { get; set; } 
     public virtual Metric Metrics { get; set; } 
    } 
} 

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 


namespace LinksDB.Models 
{ 
    public class Identifier 
    { 
     [Key] 
     public int ID { get; set; } 
     public string domain { get; set; } 

     public virtual ICollection<Link> Links { get; set; } 
     public virtual Identity Identitys { get; set; } 
     public virtual Metric Metrics { get; set; } 

    } 
} 

using LinksDB.Models; 
using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration.Conventions; 

namespace LinksDB.DAL 
{ 
    public class LinkData : DbContext 
    { 

     public LinkData() : base("LinkData") 
     { 
     } 
     public DbSet<Identifier> Identifiers { get; set; } 
     public DbSet<Identity> Identitys { get; set; } 
     public DbSet<Link> Links { get; set; } 
     public DbSet<Metric> Metrics { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     } 
    } 
} 
+0

@kirk剛剛加入它,謝謝! – liamcook

+0

你並不真正需要的[關鍵]我如果你遵循你所做的調用你的關鍵「ID」或「Class + ID」的約定。問題在於別處。是'公共虛擬身份標識{行;組; }在Identity class中是正確的(自引用)還是你打算將它作爲Identifier(與IdentifierId自動配對)FK? –

+0

@SteveGreene我也這麼認爲,原來我把它作爲自己的關鍵,所以MetricID和IdentityID。授予我的數據庫沒有很好地命名,這是我第一次將它們映射!但是我打算爲每個數據庫添加一個identifierID,這樣每個數據庫的數據就可以整理出來,如果這樣做有道理的話?問題的其他地方還有哪些,我已經完成了整個構建過程!謝謝 – liamcook

回答

0

OK,如果你想有一個1:身份和標識這些模型之間一對一的關係應該像下面那裏的孩子(Indentifier)使用IdentityId既是它的PK和FK你也可以做到這一點用流利的代碼。先從這一點,然後加在你的公制和鏈接關係。

public class Identity 
{ 
    [Key] 
    public int ID { get; set; } 

    public string contact { get; set; } 
    public string contactname { get; set; } 
    public string price { get; set; } 

    public virtual Identifier Identifier { get; set; } 
} 

public class Identifier 
{ 
    [Key, ForeignKey("Identity")] 
    public int IdentityID { get; set; } 

    public string domain { get; set; } 

    public virtual Identity Identity { get; set; } 
} 

here

相關問題