с моими классами репозитория я использую 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:
это то, что я сделал, чтобы извлечь данные о детях в их соответствующие данные.
// 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