2015-02-10 115 views
0

所以我想創建一個外鍵的表,但它總是說它無法找到外鍵。繼承人的代碼:外鍵無效與實體框架

public class Tecnologies 
    { 
     [Key] 
     public int TecId { get; set; } 
     [Required] 
     public String Name { get; set; } 
    } 

這一個工程,然後我嘗試創建這一個:

public class UserTecnologies 
    { 
     [Key] 
     public int UserTecId { get; set; } 
     [ForeignKey("Id")] 
     public UserProfile User { get; set; } 
     [ForeignKey("TecId")] 
     public virtual Tecnologies Tecnology { get; set; } 
     [Required] 
     public int Rating { get; set; } 
    } 

,它給我的錯誤:

的ForeignKeyAttribute財產 '支持下的湖南省'類型'ESW_CloddOffice.Models.UserTecnologies'無效。在依賴類型'ESW_CloddOffice.Models.UserTecnologies'上未找到外鍵名'TecId'。名稱值應該是逗號分隔的外鍵屬性名稱列表。

這些名字是正確的,我錯過了什麼?

+0

一些需要注意的是,TECNOLOGIES似乎被拼錯了。你的意思是技術? – merekel 2015-02-10 19:41:35

回答

0

好吧,我發現我做錯了。繼承人正確的代碼:

public class UserTecnologies 
    { 
     [Key] 
     public int UserTecId { get; set; } 
     [ForeignKey("UserProfile")] 
     public virtual int UserProfileId { get; set; } 
     [ForeignKey("Tecnology")] 
     public virtual int TecnologyId { get; set; } 

     public virtual Tecnologies Tecnology { get; set; } 
     public virtual UserProfile UserProfile { get; set; } 

     [Required] 
     public int Rating { get; set; } 
    } 

創建外鍵的方式是錯誤的。

0

ForeignKey屬性要求實體上的實際屬性與傳入的名稱相匹配。它不僅告訴EF在數據庫級別調用密鑰。

你要麼需要實際添加TecId屬性:

public int TecId { get; set; } 

還是用流利的配置,而不是:

modelBuilder.Entity<UserTechnologies>() 
.HasRequired(c => c.Technology) 
.WithMany() 
.Map(m => m.MapKey("TecId"));