Добавление одинаковых элементов в отношение многие ко многим в EF 4.0 - PullRequest
0 голосов
/ 12 октября 2011

У меня есть две сущности в моей доменной модели:

public class Configuration : DomainEntity
   {        
        public virtual ICollection<Hardware> Hardwares { get; set; }
        public Configuration()
        {
            Hardwares = new List<Hardware>();
        }
   }
public class Hardware : DomainEntity
    {
        public virtual ICollection<Configuration> Configurations { get; set; }
        public Hardware()
        {
            Configurations = new HashSet<Configuration>();
        }
   }

И у меня есть три таблицы в базе данных. Я связываю эти таблицы: enter image description here

modelBuilder.Entity<Configuration>().
    HasMany<Hardware>(configuration => configuration.Hardwares).
    WithMany(hardware => hardware.Configurations).
    Map(map => map.ToTable("tblConfiguration_Hardware"));

И все работает нормально, но ... Когда я добавляю одно и то же оборудование, например, три, я получаю одну запись в базе данных .

   Hardware hardware = db.Find<Hardware>(hardwareID);
   configuration.Hardwares.Add(hardware);  // first
   configuration.Hardwares.Add(hardware);  // second
   configuration.Hardwares.Add(hardware);  // third
   db.Add<Configuration>(configuration);
   db.SaveChanges();

Но я хочу сохранить три отношения. Что я не прав?

1 Ответ

2 голосов
/ 12 октября 2011

Вы не можете сделать это с отношением многих ко многим. Вы должны смоделировать вашу Configuration_Hardware как отдельную сущность с отношениями один-ко-многим с Configuration и Hardware.

Причина, по которой это не работает, заключается в том, что отношение «многие ко многим» со скрытой соединительной таблицей предполагает, что FK, используемые в соединительной таблице, образуют сложный PK, но в вашем случае у вас есть отдельный PK, и поэтому вы должны отобразить его как отдельную сущность. .

...