私のリポジトリ クラスでは、LinqToSql
リポジトリからデータを取得するために使用します (たとえば、私の例では Sql Server 2008)。結果データをPOCO
オブジェクトに配置します。よく働く :)
ここで、POCO
オブジェクトに子プロパティ (別のPOCO
オブジェクトまたは IList) がある場合、そのデータを設定する方法を見つけようとしています。これを行う方法がよくわかりません。
これが私が持っているサンプルコードです。私が設定している最後のプロパティに注意してください。コンパイルされますが、「正しく」ありません。それはPOCOオブジェクトインスタンスではありません..そして、その最後の行をコーディングする方法がわかりません。
public IQueryable<GameFile> GetGameFiles(bool includeUserIdAccess)
{
return (from q in Database.Files
select new Core.GameFile
{
CheckedOn = q.CheckedOn.Value,
FileName = q.FileName,
GameFileId = q.FileId,
GameType = (Core.GameType)q.GameTypeId,
IsActive = q.IsActive,
LastFilePosition = q.LastFilePosition.Value,
UniqueName = q.UniqueName,
UpdatedOn = q.UpdatedOn.Value,
// Now any children....
// NOTE: I wish to create a POCO object
// that has an int UserId _and_ a string Name.
UserAccess = includeUserIdAccess ?
q.FileUserAccesses.Select(x => x.UserId).ToList() : null
});
}
ノート:
- Database.Files => ファイル テーブル。
- Database.FilesUserAccess => FilesUserAccess テーブル .. どのユーザーが GameFiles / Files テーブルにアクセスできるか。
アップデート
私は今、子の結果をそれぞれのPOCO
クラスに抽出するという提案を得ましたが、これはVisual Studio Debugger
クラスが言っていることです:-
なぜそれはSystem.Data.Linq.SqlClient.Implementation.ObjectMaterializer<..>
.Convert<Core.GameFile>
List<Core.GameFile>
を含むではなく、 POCO's
?
それが何であるか/私が間違ったことを何か提案はありますか?
更新 2:
これは、子データをそれぞれの poco に抽出するために私が行ったことです..
// Now any children....
UserIdAccess = includeUserIdAccess ?
(from x in q.FileUserAccesses
select x.UserId).ToList() : null,
LogEntries = includeUserIdAccess ?
(from x in q.LogEntries
select new Core.LogEntry
{
ClientGuid = x.ClientGuid,
ClientIpAndPort = x.ClientIpAndPort,
// ... snip other properties
Violation = x.Violation
}).ToList() : null