簡體   English   中英

LINQ to Entities返回實體的孩子的孩子的錯誤ID

[英]LINQ to Entities returns wrong ID for an entity's child's child

我在MySql中有一個表結構,用外鍵設置:

期間{ID,標題}

活動{ID,標題,PeriodId}

資源{ID,文件名}

ActivityResources {ActivityId,ResourceId}

這是使用LINQ-to-Entities設置的,並且我檢查了表映射是否正確(包括多對多關系)。 通常,所有這些都可以與PeriodActivityResource類一起很好地工作。

但是,我正在嘗試使用以下代碼:

private string ListAttachments(Ctx ctx) {
  var resList = new StringBuilder();
  var p = ctx.Periods.Include("Activities.Resources").Single(o => o.Id == 1);
  foreach (var a in p.Activities) foreach (var r in a.Resources)
    resList.Append(r.Id).Append(" - ").Append(r.FileName);
  return resList.ToString();
}

但是它沒有按預期為每個資源編寫Resource.Id 由於某種原因,它改寫了Activity.Id (盡管FileName是正確的)。

知道發生了什么嗎?

編輯

順便說一句,這可以正常工作-但我仍然對上述代碼中的probem感興趣。

private string ListAttachments(Ctx ctx) {
  var resList = new StringBuilder();
  var res = ctx.Resources.Where(r => r.LessonActivities.Any(l => l.LessonId == 1)).ToList();
  foreach (var r in res) resList.Append(r.Id).Append(" - ").Append(r.FileName);
  return resList.ToString();
}

我認為您無法以這種方式引用兒童/兒童收藏。 Period對象上的“ Activities導航屬性是一個集合。 而且,您無法通過這些對象的集合來引用屬於該對象實例的屬性。

換句話說, Period p具有Activities集合。 但是Activity類型的集合沒有 Resources集合。 只有一個Activity具有Resources集合。

我不明白的是為什么第一個代碼片段根本無法工作。

無論如何,要直接從Period進入Resources集合,您將需要使用SelectMany() 就像是

List<Resource> resources = ctx.Periods
                              .Where(p=>p.Id == 1)
                              .SelectMany(p=>p.Activities)
                              .SelectMany(a => a.Resources)
                              .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM