私はEntity Framework 4.1を最初に使用していますが、多対多の関連レコードを取得する際には少し問題があります関係。私はメインメンバーエンティティを持っていて、次に関連付けられたMemberStatus(1対多の関係)と関連付けられたMemberPosition(多対多の関係)を持っています。Entity Framework 4.1を使用して多対多関係で関連レコードを取得するコードファースト
管理コンソールでは、MemberStatusesまたはMemberPositionsのリストを取得していますが、値を削除できるかどうかを判断できるように、これらの値にメンバーが割り当てられているかどうかを知る必要があります。
私は私が私の管理コンソールで使用しています次のコードを持っている:予想通り
var statusList = MemberStatusRepository.AllIncluding(x => x.Members).ToList(); // This works...
var positionList = MemberPositionRepository.AllIncluding(x => x.Members).ToList(); // This doesn't...
statusList値が戻ってくるとステータスの収集が割り当てられているどのように多くのメンバーの数を含んでいます。しかし、postionListには適切なリストが返されますが、メンバーが割り当てられていることがわかっている場合、各位置のMembersコレクションには0が表示されます。
私は各メンバーのポジションのリストを得ることができるので、私のメンバーマップではマッピングが正しいと思います。私はちょうど各位置のメンバーのリストである逆を得ることができません。また、EFによって作成されたDBは、Members to Positionsの多対多リレーションシップの適切なスキーマで正しいと見なされます。
エンティティのコードとエンティティタイプコンフィグレーションから継承したEFマッピングは次のとおりです。上記のコードを呼び出すと、メンバーのリストが各位置とともに返されるように、MemberPositionマップには何が欠けていますか?
public class Member : Entity
{
public string Email { get; set; }
public int StatusId { get; set; }
public virtual MemberStatus Status { get; set; }
public virtual List<MemberPosition> Positions { get; set; }
}
public class MemberStatus : Entity
{
public string Name { get; set; }
public ICollection<Member> Members { get; set; }
}
public class MemberPosition : Entity
{
public string Name { get; set; }
public ICollection<Member> Members { get; set; }
}
public MemberMap()
{
ToTable("Members");
Property(m => m.Email).IsRequired().HasMaxLength(255);
HasMany(m => m.Positions).WithMany() .Map(m => m.ToTable("Member_MemberPositions").MapLeftKey("MemberId").MapRightKey("PositionId"));
HasRequired(m => m.Status).WithMany(s => s.Members).WillCascadeOnDelete(false);
}
public MemberStatusMap()
{
ToTable("MemberStatuses");
}
public MemberPositionMap()
{
ToTable("MemberPositions");
HasMany(p => p.Members).WithMany();
}
これはうまくいきました。ありがとう! – bigmac