Код составных ключей Entity Framework первым вызывает ошибки при проверке модели

#c# #asp.net-mvc-3 #entity-framework-4 #model #composite-key

#c# #asp.net-mvc-3 #entity-framework-4 #Модель #составной ключ

Вопрос:

Я использую ASP.NET MVC 3 с подходом Entity Framework 4 code first, и каждый раз, когда я пытаюсь указать составные ключи, используя атрибут key в своих моделях, я получаю эту ошибку:

System.Data.Edm.EdmAssociationConstraint: : Количество свойств в зависимой и главной роли в ограничении отношений должно быть точно идентичным.

Я использую атрибут столбца, чтобы различать порядок первичных ключей следующим образом:

  public class Game
    {
        [Key, Column(Order=0)]
        public Guid GameId { get; set; }
        [Key, Column(Order=1)]
        public string Name { get; set; }
        public string Description { get; set; }
        public Game()
        {
            this.GameId = Guid.NewGuid();
        }
    }
  

Я хотел бы знать, существует ли другой подход к созданию составных ключей или, возможно, есть способ прекратить получение этой ошибки? Я знаю, что можно добавить логику к событию OnModelBuild, но я бы предпочел использовать ключевые атрибуты модели, если это возможно.

Комментарии:

1. Похоже, вы используете одно из ключевых свойств (GameID?) в ассоциации. Какие ассоциации с другими объектами имеет Game?

2. Я создаю базу данных игр, которая будет состоять из игр с Xbox Live, PSN и Steam. Объект Game является своего рода суперклассом для каждой из этих сетевых игр. Кроме того, я буду использовать объект Game для представления игр, не специфичных для онлайн-сетей и старых консолей, таких как SNES или NES.

Ответ №1:

Попробуйте исключить имя свойства из ключа сущности (что я бы рекомендовал). Или используйте его во всех объектах, если вам действительно нужно сделать его частью ключа.

Комментарии:

1. Мне нужно, чтобы имя каждой сущности было уникальным, поэтому оно должно быть частью ключа сущности. Я попробую добавить имя для всех объектов. Спасибо за совет.

2. Спасибо за вашу помощь. Я решил не включать имя в ключ сущности. Мне нужно на самом деле проверить наличие объекта с именем, прежде чем добавлять новый объект с тем же именем. Я отмечу свой вопрос как ответ на ваш ответ.