2015-04-20 4 views
1

У меня есть модель с двумя полями, которые имеют подключение внешнего ключа к другой таблице. У них разные имена, и я не могу понять, как заставить отношения работать.MVC 4 Атрибут внешнего ключа

Вот мои два объекта. Visitor и Home Teams - это то, что у меня возникают проблемы с настройкой отношений между ними.

Ошибка я получаю:.

«Не удалось получить метаданные для 'Models.Game' The ForeignKeyAttribute на имущество VisitorID на тип 'Models.Game' не действует Навигационная. свойство 'Team' не было найдено на зависимом типа 'Models.Game'. Значение имени должно быть допустимым навигационным свойством . "

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] в свойство reference, а не идентификатор. Я перечислил скорректированный код ниже для посетителей и домашних команд

[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; } 
Смежные вопросы