在EF 4.0中将相同的项添加到多对多关系中

时间:2011-10-12 10:45:37

标签: asp.net-mvc entity-framework c#-4.0 icollection

我的域模型中有两个实体:

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 个答案:

答案 0 :(得分:2)

你不能用多对多的关系做到这一点。您必须将Configuration_Hardware建模为具有与ConfigurationHardware的一对多关系的单独实体。

它不起作用的原因是隐藏联结表的多对多关系期望联结表中使用的FK形成复杂的PK,但在您的情况下,您有单独的PK,因此您必须将其映射为单独的实体

相关问题