我有两个型号,一个是设备类型,另一个是设备的问题得到解决外键值。这里的关系是一个(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,
如果您请注意我的代码中有一段注释掉的代码。这是因为评论它引发以下内部异常:
{"There is already an open DataReader associated with this Command which must be closed first."}
我不知道这与我的具体问题,或者不这样做,虽然。
我的问题是,如何取回从这些关系中的数据?
注:关系确实存在,因为外面的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.
注意上面的评论:“除了现在的问题列表已填充。“
['virtual'被推断延迟加载(http://stackoverflow.com/问题/ 5597760 /什么效果灿的虚拟关键字具备的,在实体框架-4-1-POCO码-FI)。您可以在'DbContext'调整延迟加载或使用'.INCLUDE()'方法,当你做查询主对象(所以它抓住协会以及)。例如'context.DeviceTypes.Include(x => x。DeviceIssues)' –