2
と私はマッピング機能を以下ました:マッピングLINQのツーSQLクラスのドメインクラスにネストされたコレクション
private static Expression<Func<ActionComment, Domain.ActionComment>> MapActionComment =
actionComment => new Domain.ActionComment
{
Id = actionComment.Id,
Comment = actionComment.Comment,
};
private static Expression<Func<Action, Domain.Action>> MapAction =
action => new Domain.Domain
{
Id = action.Id,
Comments = action.ActionComments
.Select(ac => MapActionComment.Invoke(ac))
};
private static Expression<Func<Nc, Domain.Nc>> MapNc =
nc => new Domain.Nc
{
Id = nc.Id,
Actions = nc.Actions
.Select(a => MapAction.Invoke(a)),
};
そして、次のLINQのツーSQLクエリ:
_ctx.NCs
.Where(n => n.Id == id)
.Select(MapNc)
.SingleOrDefault();
たSQLステートメントは次のとおりです:
SELECT [t0].[Id], -- columns
(SELECT COUNT(*)
FROM [dbo].[Actions] AS [t2]
WHERE [t2].[NCId] = [t0].[Id]
) AS [value]
FROM [dbo].[NCs] AS [t0]
LEFT OUTER JOIN [dbo].[Actions] AS [t1] ON [t1].[NCId] = [t0].[Id]
WHERE [t0].[Id] = @p0
ORDER BY [t0].[Id], [t1].[Id]
アクションオブジェクトのコメントコレクションは内容をロードしませんコレクションの実際の使用量)。
Linq-to-SQLに強制的に生成させる方法はありますかONE Ncs、アクション、ActionCommentsをフェッチする単一の文ですか?
:特に、EFは次のように簡単な
Include()
メソッドを使用して、積極的なロードのために良いサポートを持っています1レベル低下。 2つ以上のレベルを下げる必要があるということです。 EFはオプションではありません。それは私が維持している何らかのレガシーシステムです。 – rafek私はこの記事を読んでいますが、私は今、限界があることを知りました。私は少なくともあなたが見たいところを教えてくれました。 –