次のコードをもっと抽象的に書きたいと思います。
private void LoadRelatedData(TabAccount tabAccount)
{
if (ConxCore.Instance.EntityModel.Entry(tabAccount).Collection(x => x.TabAccountLangs).IsLoaded == false)
{
var list = (from x in ConxCore.Instance.EntityModel.TabAccounts
from y in x.TabAccountLangs
select y).ToList();
}
}
要約したい部分は次のとおりです。
.Entry(tabAccount) -> すべての EntitySet を取得する必要があります
x => x.TabAccountLangs -> メソッドの呼び出し時に指定したプロパティを取得する必要があります (おそらく MemberExpression をスローしました)
from x ...TabAccounts -> メソッドを呼び出している EntitySet から DbSet をロードする必要があります
from y in x.TabAccountLangs -> 上記のプロパティである必要があります
抽象化については、このコードを何度もコピー/貼り付けすることを避け、言及された4つのポイントを変更するだけで、パラメーターを指定してこのメソッドを呼び出すことができれば幸いです。メソッドは残りを行います。
したがって、代わりに:
private void LoadRelatedData(TabAccount tabAccount)
{
if (ConxCore.Instance.EntityModel.Entry(tabAccount).Collection(x => x.TabAccountLangs).IsLoaded == false)
{
var list = (from x in ConxCore.Instance.EntityModel.TabAccounts
from y in x.TabAccountLangs
select y).ToList();
}
}
private void LoadRelatedData(TabElement tabElement)
{
if (ConxCore.Instance.EntityModel.Entry(tabElement).Collection(x => x.TabElementLangs).IsLoaded == false)
{
var list = (from x in ConxCore.Instance.EntityModel.TabElements
from y in x.TabElementLangs
select y).ToList();
}
}
このようなもの(疑似コードのみ):
private void LoadRelatedData(object obj, object collection, object dbSetOfObj)
{
if (ConxCore.Instance.EntityModel.Entry(obj).Collection(x => x.collection).IsLoaded == false)
{
var list = (from x in ConxCore.Instance.EntityModel.dbSetOfObj
from y in x.collection
select y).ToList();
}
}
そして、このメソッドを呼び出します:
LoadRelatedData(tabAccount, TabAccountLangs, TabAccounts);
LoadRelatedData(tabElement, TabElementLangs, TabElements);
あなたが私を助けてくれることを願っています。前もって感謝します。