0

ドメインモデルに2つのエンティティがあります。

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>();
        }
   }

そして、データベースには3つのテーブルがあります。これらのテーブルをバインドします。 ここに画像の説明を入力してください

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

そして、それは正常に動作しますが...同じハードウェア(たとえば3つのハードウェア)を追加すると、データベースに1つのレコードが取得されます。

   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();

しかし、私は3つの関係を保存したいと思います。私は何が間違っていますか?

4

1 に答える 1

2

多対多の関係ではそれを行うことはできません。Configuration_Hardwareと との 1 対多の関係を持つ別個のエンティティとしてモデル化する必要がありConfigurationますHardware

機能しない理由は、非表示のジャンクション テーブルとの多対多の関係では、ジャンクション テーブルで使用される FK が複雑な PK を形成することを期待しているためですが、この場合、別の PK があるため、別のエンティティとしてマップする必要があります。

于 2011-10-12T10:56:27.897 に答える