Ошибка LINQ с DTO - PullRequest
       2

Ошибка LINQ с DTO

0 голосов
/ 13 декабря 2010

Я вижу странную проблему и думаю, что что-то упустил.DTO, кажется, не заполняется, когда возвращается.Устанавливаются только те свойства, которые инициализируются в запросе LINQ, те, которые задаются в ParseJobResultsXml, не получают настройки, как видно из вывода DEBUG.

DTO настраивается в запросе LINQ, что-тонапример:

public class JobResultDTO
{
 [Key]
 public string Id { get; set; }
 public string Created { get; set; }
 public string Finished { get; set; }
 public string Status { get; set; }
 public string PlantLink { get; set; }
 public IEnumerable<string> Messages { get; set; }
 public string JobType { get; set; }
}
    private void ParseJobResultXml(string jobResultXml, JobResultDTO jobDto)
{
 try
 {
  var xmlElement = XElement.Parse(jobResultXml);
  if (xmlElement != null)
  {
   jobDto.Finished = xmlElement.Element("Date").Value;
   jobDto.Status = xmlElement.Element("Status").Value;
   jobDto.PlantLink = xmlElement.Element("PlantLink").Value;
   jobDto.Messages = xmlElement.Element("Messages").Elements("Message").Select(m => m.Value);
  }
 }
 catch { }
}


    var jobsAndResults = _context.Jobs.Where(j => j.JobType == jobOpenPlant || j.JobType == jobNormSite)
 .AsEnumerable()
 .Where(j => JobResultXmlHelper.JobBelongsToUser(j.JobResult, userLogin))
 .OrderByDescending(j => j.JobCreated)
 .Select(j => new
 {
  Result = j.JobResult,
  Dto = new JobResultDTO
  {
   Id = j.Id.ToString(),
   JobType = j.JobType,
   Created = (j.JobCreated ?? DateTime.Now).ToString()
  }
 });
foreach (var j in jobsAndResults)
{
 ParseJobResultXml(j.Result, j.Dto);
 DumpDTO(j.Dto); //I see it set up correctly here
}
jobs.AddRange(jobsAndResults.Select(j => j.Dto));
DumpDTO(jobs.ElementAt(0)); //Now only the Key property is set
return jobs;

Это вывод отладки, который я вижу на сервере для двух строк отладки

На сервере ... Идентификатор: 51a8d041-5dff-4849-9651-9fb2fe89816aСтатус: Закончено

Каталог - Успешно обновлено 0 записей: Модель - Успешно обновлено 0 записей:

На сервере ... Идентификатор: 51a8d041-5dff-4849-9651-9fb2fe89816a Статус:

Как вы видите, у второго нет записи для Status coln.Есть идеи, почему это происходит?

1 Ответ

0 голосов
/ 13 декабря 2010

Я думаю, что ваш код правильный, но у вас нет времени ожидания.

Я не видел в вашем синтаксисе LoadOperation .

Ваш код будет работать в WPF, но не в SilverLight.

* Обновление: * Попробуйте

foreach (var j in jobsAndResults)
{
 ParseJobResultXml(j.Result, j.Dto);
 DumpDTO(j.Dto); //I see it set up correctly here
jobs.Add(j.Dto);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...