2014-12-06 57 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(); 

现在空引用异常走了。