我有两种型号,一种用于设备类型,另一种用于设备问题。这里的关系是一个(DeviceType)到多个(DeviceIssues)。以下是模型:
public class DeviceType : ModelBase
{
public string Manufacture { get; set; }
public DeviceTypes Type { get; set; }
public string Model { get; set; }
public virtual ICollection<DeviceIssue> Issues { get; set; }
}
public class DeviceIssue : ModelBase
{
public string Description { get; set; }
public decimal RepairCost { get; set; }
public int DeviceTypeId { get; set; }
public virtual DeviceType DeviceType { get; set; }
}
public abstract class ModelBase
{
public int Id { get; set; }
public Guid Guid { get; set; }
public DateTime FirstCreated { get; set; }
public string LastUpdateUser { get; set; }
public DateTime LastUpdateDt { get; set; }
public bool IsDeleted { get; set; }
}
我必须使用种子方法填充几个实体的数据库,并且它们的外键是完整的。但是,当我获得设备类型列表时,我也没有获得每个设备的相关问题列表。但是,我正在使用 AutoMapper,在调试存储查询结果的变量时也没有显示数据。这是我用来拨打电话的代码:
var result = new List<DeviceTypeDataContract>();
using (var context = new DSPEntities())
{
var devices = context.DeviceTypes;
foreach (var device in devices)
{
//var issues = context.DeviceIssues.Where(i => i.DeviceTypeId == device.Id).ToList();
var devi = Mapper.Map<DeviceType, DeviceTypeDataContract>(device);
result.Add(devi);
}
}
现在如前所述,在调试时,检查 中的变量device
,foreach(var device in devices)
每次都显示以下类似的结果:
device.Issues = null,
device.manufacture = "Apple",
device.Model = "iPhone 3S",
device.Type = DeviceTypes.SmartPhone,
如果您注意到我的代码中有一行注释掉的代码。之所以对此进行注释,是因为它引发了以下内部异常:
{“已经有一个打开的 DataReader 与此命令关联,必须先关闭。”}
我不知道这是否与我的具体问题有关。
我的问题是,我如何从这些关系中检索数据?
注意:关系确实存在,因为在 foreach 语句之外,调用以下内容:
var issues = context.DeviceIssues.Where(i => i.DeviceTypeId == 1).ToList();
给出以下结果:
issues[6].Description = "Water Damage",
issues[6].RepairCost = 0.00,
issues[6].DeviceTypeId = 1,
issues[6].DeviceType = [+]{Data.Model.DeviceType},
// The last property holds values similar to above.
// Except now the list of issues is populated.
请注意上面的评论:“除了现在填充问题列表。”