2014-12-06 88 views
0

我在我的ASP.NET項目中使用的unit of workrepository pattern實體框架6.延遲加載不新增對象

我現在面臨的問題是一起活動的,是當我添加一個新的對象數據庫,當我再次調用同一對象時,它不會直接激活爲Lazy loading

例如:

我有一個Attendance object含有2個虛擬鏈接DayCodeEmployee

public partial class Attendance 
{ 
    public Attendance() 
    { 
     this.Id = -1; 
     this.EmployeeId = -1; 
     this.Present = false; 
     this.Time = 0; 
     this.Closed = false; 
     this.Correction = false; 
    } 

    public int Id { get; set; } 
    public int EmployeeId { get; set; } 
    public bool Present { get; set; } 
    public System.DateTime Date { get; set; } 
    public string Remark { get; set; } 
    public int Time { get; set; } 
    public Nullable<short> DayCodeId { get; set; } 
    public bool Closed { get; set; } 
    public bool Correction { get; set; } 

    public virtual Employee Employee { get; set; } 
    public virtual DayCode DayCode { get; set; } 
} 

DayCode類:

public partial class DayCode 
{ 
    public DayCode() 
    { 
     this.Id = -1; 
     this.Code = ""; 
     this.Attendances = new HashSet<Attendance>(); 
    } 

    public short Id { get; set; } 
    public string Code { get; set; } 
    public string Title { get; set; } 
    public string Color { get; set; } 

    public virtual ICollection<Attendance> Attendances { get; set; } 
} 

我點擊我的網頁按鈕的事件:

protected void btnSaveCorrection_Click(object sender, EventArgs e) 
    { 
     Attendance attendance = GetItem(); 

     try 
     { 
      unitOfWork.AttendanceRepository.Add(attendance); 
      unitOfWork.Save(); 
     } 
     catch 
     { 
      ShowMessage("Problemen ondervonden, probeer opnieuw!", "alert alert-danger"); 
     } 

     // Load attendances 
     LoadAttendances(3); // Test Michael 
     LoadCorrections(3); // Test Michael 
    } 

LoadCorrections方法:

private void LoadCorrections(int employeeId) // Test _EmployeeId 
    { 
     //... 

     Employee _employee = unitOfWork.EmployeeRepository.LoadItem(employeeId); 

     int counter = 0; 
     foreach (Attendance attendance in _employee.Attendances.Where(
       e => e.Correction && e.Date.Month == _Date.Month 
      ).OrderBy(e => e.Date).ThenBy(e => e.Id)) 
     { 
      _bodyRow = new BTableBodyRow(); 
      _bodyRow._CssClass = ""; 

      //... 

      _cellBody = new BTableBodyCell(); 
      _cellBody._Content = attendance.DayCode.Code + " (" + attendance.DayCode.Title + ")"; 

      //Here I get a nullreference exception!!!!!!!!!!!!!!!!!! 

      _cellBody._CssClass = "left"; 
      _bodyRow._BodyCells.Add(_cellBody); 

      //... 

      _bodyRows.Add(_bodyRow); 

      counter++; 
     } 

     //... 
    } 

我必須更新s ome的方式Lazy loading或...?

回答

0

找到了解決辦法閱讀Entity Framework Code First not lazy loading after save

的問題是,我只是創建了POCO類的新實例,而不是代理的答案。 在我的Repository模式中,我創建了一個新的虛擬方法Create,它創建了這個代理。

public virtual T Create() 
{ 
    return this._dbSet.Create<T>(); 
} 

,而不是創建使用考勤類的新實例,並:

Attendance attendance = new Attendance(); 

我使用Repository模式的方法Create

Attendance attendance = unitOfWork.AttendanceRepository.Create(); 

現在空引用異常走了。