2015-04-20 61 views
1

我有一个模型有两个字段有一个外键连接到不同的表。他们有不同的名字,我无法弄清楚如何让这种关系发挥作用。MVC 4外键属性

这是我的两个对象。 VisitorHome Teams是我在设置关系时遇到的问题。

我得到的错误是:

“无法检索“Models.Game的元数据的 ForeignKeyAttribute财产VisitorID上键入‘Models.Game’不是 有效的导航。属性'Team'在依赖 类型'Models.Game'上找不到。名称值应该是有效的导航属性 name。“

public class Team 
{ 
    public Int64 TeamID { get; set; } 

    [Required(ErrorMessage = "{0} is required")] 
    [Display(Name = "Team Name")] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "{0} is required")] 
    [Display(Name = "League Name")] 
    [ForeignKey("League")] 
    public Int64 LeagueID { get; set; } 

    public virtual League League { get; set; } 
} 

public class Game 
{ 
    public Int64 GameID { get; set; } 

    [Required(ErrorMessage = "{0} is required")] 
    [Display(Name = "Season Name")] 
    [ForeignKey("Season")] 
    public Int64 SeasonID { get; set; } 

    public virtual Season Season { get; set; } 

    [Required(ErrorMessage = "{0} is required")] 
    [DataType(DataType.DateTime)] 
    [Display(Name = "Game Time")] 
    public DateTime Time { get; set; } 

    [Required(ErrorMessage = "{0} is required")] 
    [Display(Name = "Visitor Team")] 
    [ForeignKey("Team")] 
    public Int64 VisitorID { get; set; } 

    public virtual Team Visitor { get; set; } 

    [Required(ErrorMessage = "{0} is required")] 
    [Display(Name = "Home Team")] 
    [ForeignKey("Team")] 
    public Int64 HomeID { get; set; } 

    public virtual Team Home { get; set; } 

    [Required(ErrorMessage = "{0} is required")] 
    [Display(Name = "Rink")] 
    [ForeignKey("Location")] 
    public Int64 LocationID { get; set; } 

    public virtual Location Location { get; set; } 

    public virtual List<GameEvent> GameEvents { get; set; } 
} 
+0

什么是错误? &为什么你的主键是32位整数和64位的混合? – BenjaminPaul

+0

如果您删除所有不需要的额外代码和数据注释将会很有帮助,因此我们更容易阅读(比如'required'和'display') –

回答

0

更改您的FK属性。它必须包含导航属性名称,而不是类型

[Required(ErrorMessage = "{0} is required")] 
    [Display(Name = "Visitor Team")] 
    [ForeignKey("Visitor")] 
    public Int64 VisitorID { get; set; } 
0

经过几天的研究,我发现我在做什么错误的游戏模型。马丁说,我需要使用导航属性是正确的。我还需要将[ForeignKey]属性放在引用属性上,而不是ID。我列出了访问者和家庭团队下面的更正代码

[Required(ErrorMessage = "{0} is required")] 
    [Display(Name = "Visitor Team")]    
    public Int64 VisitorID { get; set; } 

    [ForeignKey("VisitorID")] 
    public virtual Team Visitor { get; set; } 

    [Required(ErrorMessage = "{0} is required")] 
    [Display(Name = "Home Team")]   
    public Int64 HomeID { get; set; } 

    [ForeignKey("HomeID")] 
    public virtual Team Home { get; set; }