我有两个实体与一对一的关系,模型如下:
public class Asset
{
public int Id { get; set; }
public string Name { get; set; }
public TrackingDevice TrackingDevice { get; set; }
}
public class TrackingDevice
{
public int Id { get; set; }
public string Imei { get; set; }
public int? AssetId { get; set; }
public Asset Asset { get; set; }
}我输入了数据,所以当我进行以下简单查询时:
var list = _appContext.TrackingDevices.Include(td => td.Asset).ToListAsync();我正确地获得了包含其资产的跟踪设备列表,然而,资产子节点再次包含跟踪设备,这反过来又包括资产等等,这创建了一个无限结构,当应用AutoMapper失败时。
我怎样才能做到包括和只得到我需要的2级?跟踪设备->资产
发布于 2019-10-11 06:09:48
这在EF Core中真的很烦人。
我不能完全解决这个问题,但是这里是一个关于这个问题的解决方案,不是一个完整的解决方案,。
var list = _appContext.TrackingDevices.Include(td => td.Asset).ToListAsync();
foreach(var l in list)
l.Asset.TrackingDevice = null;发布于 2018-12-11 15:27:23
你想要建立的是你的资产和跟踪设备之间的1比1的关系.如果您的代码配置不正确,您的代码将真正告诉EF Core,您的每个实体都有一个链接到它的实体。
为了让EF核心理解这一点,你需要这样声明你的关系:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Asset>()
.HasOne(a => a.TrackingDevice)
.WithOne(t => t.Asset)
.HasForeignKey<TrackingDevice>(b => b.AssetId);
}请看一看这里,以获得更多关于如何设置此设置的信息。
此外,为了避免使用EF来避免返回嵌套对象,请尝试使用选择而不是include (然后可以导出所需的内容):
var list = _appContext.TrackingDevices
.Select(t => new {
TrackingDevice = t,
...
Asset = Asset,
});https://stackoverflow.com/questions/53726850
复制相似问题