0

これが私を悩ませていることです.私は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; }
}

基本的、

  1. マスターにはスレーブのリストがあります。
  2. スレーブはマスター (親) に属している必要があります。
  3. スレーブには別のマスター (子) があり、スレーブのリストを持つことができます。

ここに、対応するデータ マッピング クラスが来ます。

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 であることを意味します。

この問題を引き起こすデータ マッピング クラスの何が問題なのかわかりません。

4

2 に答える 2

0

わかりました、みんな、私は解決策を見つけます。それは純粋に私のせいです。'ParentMaster' と 'ChildMaster' の前に 'virtual' を追加するのを忘れています。

アソシエーションの動作は、「動的プロキシを作成する EntityObject および POCO に関連する」ためです。--- Julia Lerman の [プログラミング エンティティ フレームワーク、第 19 章]。

于 2015-04-22T23:48:05.187 に答える