我正在製作一個MCV開放時間管理員,其中包含一個包含ExceptionHoursSet集合的ICollection類,每個HoursSet進一步包含一個WeekSpec。 (該ExceptionHoursSets包含用於定義例外一般WeekSpec小時圖案也包含在附表小時。)EF代碼優先加載不完成ICollection屬性
Schedule.cs(縮寫):
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace HoursAdmin.Models
{
public class Schedule
{
[Required]
public Guid ScheduleId { get; set; }
// Miscellaneous props
// General hours pattern
public Guid WeekSpecId { get; set; }
public virtual WeekSpec WeekSpec { get; set; }
// All exceptions to that pattern
virtual public ICollection<ExceptionHoursSet> ExceptionHoursSets { get; set; }
}
}
ExceptionHoursSet.cs(也縮寫):
using System;
using System.ComponentModel.DataAnnotations;
namespace HoursAdmin.Models
{
public class ExceptionHoursSet
{
[Required]
public Guid ExceptionHoursSetId { get; set; }
// More misc props
public Guid WeekSpecId { get; set; }
[Required]
public WeekSpec WeekSpec { get; set; }
}
}
WeekSpec.cs(簡稱尚):
using System;
using System.ComponentModel.DataAnnotations;
namespace HoursAdmin.Models
{
public class DaySpec
{
[Required]
public Guid DaySpecId { get; set; }
// Good old misc props
}
}
如果我檢索Schedule,HoursSet集合加載,但每個HoursSet的WeekSpec都爲null。我目前配置忽略,我應該只使用代碼第一次加載和手動查詢其ID匹配存儲爲ExceptionHoursSet的外鍵的WeekSpec嘮叨的感覺:
public ViewResult Index()
{
using (var db = new HoursDb())
{
var schedules = db.Schedules.ToList();
foreach (var schedule in schedules)
{
var exceptionHoursSets = schedule.ExceptionHoursSets;
foreach (var exceptionHoursSet in exceptionHoursSets)
{
var weekSpec = db.WeekSpecs.FirstOrDefault(d => d.WeekSpecId ==
exceptionHoursSet.WeekSpecId);
exceptionHoursSet.WeekSpec = weekSpec;
db.Entry(weekSpec).Collection(w => w.DaySpecs).Load();
}
}
return View(schedules);
}
}
然而,這是重複和乏味。 ..所以任何人都會介意如何做到這一點?
P.S. - 在Auto-retrieve ICollection of complex type with Code First中提供的答案將不起作用,因爲您可以看到我無法將WeekSpec中的導航道具放置到其父實體,因爲該實體可能是Schedule或ExceptionHoursSet(請參閱How to define an MVC database structure using the same sub-table in different super-tables)。
大加讚賞,
彌敦道債券
感謝,認爲做到了。我以前嘗試過某種熱切的加載方式,但它不起作用。起初,你們也沒有工作;然後我發現我沒有使用System.Data.Entity,所以我沒有得到Include擴展。 – NargothBond 2012-08-02 14:11:47