エンティティ フレームワークで Poco Generator を使用しており、Poco Proxy クラスが正常に生成されています。
単一のテーブルの場合、すべてがうまくいき、
ここでは、クラスの主要部分をリストし、テーブル間の関係を説明しました。次のように、多対多の関係を持つ 3 つのテーブルがあります。
1-権限 2-能力 3-権限能力マップ
各権限は、多くの能力とその逆を持つことができます。主な問題は、Authority クラスの Navigation プロパティが機能しないことです。
Authority クラスは次のとおりです (リストされているクラスの一部にすぎません)。
public partial class Authority
{
.
.
.
public virtual ICollection<AuthorityAbilityMap> AuthorityAbilityMaps
{
//Poco implementation
}
private ICollection<AuthorityAbilityMap> _authorityAbilityMaps;
.
.
.
}
そして能力クラス:
public partial class Ability : IAuditable
{
.
.
.
public virtual ICollection<AuthorityAbilityMap> AuthorityAbilityMaps
{
//Poco implementation contains get and set.
}
private ICollection<AuthorityAbilityMap> _authorityAbilityMaps;
}
そして AuthorityAbilityMaps ナビゲーション プロパティ:
public virtual Ability Ability
{
get { return _ability; }
set
{
if (!ReferenceEquals(_ability, value))
{
var previousValue = _ability;
_ability = value;
FixupAbility(previousValue);
}
}
}
private Ability _ability;
public virtual Authority Authority
{
get { return _authority; }
set
{
if (!ReferenceEquals(_authority, value))
{
var previousValue = _authority;
_authority = value;
FixupAuthority(previousValue);
}
}
}
上記のクラスに対してテストされたソース コードは次のとおりです。
AuthorityEntities authorityContext = new AuthorityEntities();
Authority authority = authorityContext.Authorities.Where(x => x.AID == 85).FirstOrDefault();
ICollection<AuthorityAbilityMap> allMaped = authority.AuthorityAbilityMaps;
allMaped には 0 メンバーが含まれています。
ご存じのように、ナビゲーション プロパティは Poco Generator によって作成されます。
実際、これらのナビゲーション プロパティを使用して、関連するすべてのレコードを読み込み、特定の機関に対して複数のアビリティをまとめて提供したいと考えています。
前もって感謝します。