これが私を悩ませていることです.私は2つのエンティティを持っています---「マスター」と「スレーブ」、最初にそれらをリストさせてください:
public class Master
{
public Guid Id {get;set;}
public virtual ICollection<Slave> Slaves { get; set; }
public virtual Slave ParentSlave { get; set; }
}
class Slave
{
public Guid Id { get; set; }
public Guid ParentMasterId { get; set; }
public Master ParentMaster { get; set; }
public Guid? ChildMasterId { get; set; }
public Master ChildMaster { get; set; }
}
基本的、
- マスターにはスレーブのリストがあります。
- スレーブはマスター (親) に属している必要があります。
- スレーブには別のマスター (子) があり、スレーブのリストを持つことができます。
ここに、対応するデータ マッピング クラスが来ます。
class MasterDataMap : EntityTypeConfiguration<Master>
{
public MasterDataMap()
{
HasKey(i => i.Id);
HasOptional(o => o.ParentSlave).WithRequired(o=>o.ChildMaster);
ToTable("Master");
}
}
class SlaveDataMap : EntityTypeConfiguration<Slave>
{
public SlaveDataMap()
{
HasKey(i => i.Id);
HasRequired(o => o.ParentMaster).WithMany(m => m.Slaves).HasForeignKey(k=>k.ParentMasterId).WillCascadeOnDelete(true);
HasRequired(o => o.ChildMaster).WithOptional(d => d.ParentSlave);
ToTable("Slave");
}
}
これら 2 つのエンティティは問題なく EF モデルの検証に合格でき、次のコードを実行した後、エンド ツー エンドのテスト中にテーブルを正常に作成できます。
for (var idx = x; idx <= xx; idx++)
{
topMaster.Slaves.Add(new Slave
{
Id = Guid.NewGuid(),
ChildMaster = new Master
{
Id = Guid.NewGuid(),
}
});
}
topMaster とそのスレーブはすべてテーブルに挿入され、childmaster も挿入されましたが、topMaster のスレーブに関連付けられていません。これは、'ChildMaster' が null で、'ChildMasterId' が空の GUID であることを意味します。
この問題を引き起こすデータ マッピング クラスの何が問題なのかわかりません。