我看到一个奇怪的问题,我想我错过了一些东西。返回时DTO似乎没有填充。只有在LINQ查询中设置init的属性才会被设置,在ParseJobResultsXml中设置的属性不会在DEBUG输出中看到设置。
正在LINQ查询中设置DTO,如下所示:
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;
这是我在服务器上看到的两个DEBUG行的调试输出
在服务器上...... Id:51a8d041-5dff-4849-9651-9fb2fe89816a状态:已完成
目录 - 已成功更新0条记录: 模型 - 已成功更新0条记录:
在服务器上...... Id:51a8d041-5dff-4849-9651-9fb2fe89816a状态:
正如您所看到的,第二个没有Status coln的条目。任何想法为什么会发生这种情况?
答案 0 :(得分:0)
我认为您的代码是正确的,但您没有等待时间。
我的语法中没有看到任何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);
}