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

Я пытаюсь сделать первый проект фреймворка кода, который состоит из двух классов/таблиц. Один класс представляет виджет. Второй класс/таблица содержит атрибуты этого виджета. т. е. с правой резьбой, с левой резьбой, малая, большая и т. д.

Каждый виджет может иметь 1 или более атрибутов, и каждый атрибут может принадлежать многим виджетам.

Сначала я не понимаю, как это должно быть представлено в коде.

    class Widget{
      public int Id {get;set;}
      public string Name {get;set;}
      public ICollection<Attribute> Attributes{get; set;}
    }

    class Attribute{
      public int Id{ get; set;}
      public string Name{get; set;}
    }

Приведенные выше классы дают мне две таблицы и несколько копий одного и того же атрибута в БД.

В конечном итоге я пытаюсь использовать таблицу атрибутов как своего рода расширяемое перечисление.


person John S    schedule 28.04.2014    source источник
comment
Я думаю, мне нужно добавить промежуточную таблицу. то есть атрибуты виджета   -  person John S    schedule 28.04.2014


Ответы (2)


Поскольку у вас нет свойства навигации в сущности Attribute, Entity Framework не будет определять по соглашению наличие связи "многие ко многим". Вместо этого он создаст один ко многим. Чтобы указать отношение «многие ко многим», необходимо добавить в контекст код сопоставления.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Widget>()
        .HasMany(w => w.Attributes)
        .WithMany();
}

Код .Map() в приведенном вами примере необходим только в том случае, если вы хотите указать имена столбцов или таблиц. Если вы опустите этот код, Entity Framework предоставит имена.

person JC Ford    schedule 28.04.2014

В конце концов я нашел соответствующую статью, которая хорошо объяснила это. Меня беспокоит возраст статьи и изменилось ли что-либо с 2011 года. Code-First" rel="nofollow">Статья «Многие ко многим»

person John S    schedule 28.04.2014