LINQ to SQL - 在部分类中更新数据上下文对象

问题描述:

我创建了一个可扩展性方法来删除一个名为Reservation的Linq To Sql对象。那么,在我创建的这个部分方法中,我想更新一些其他对象。我似乎无法将更新保存在数据库中。这是我删除预订的部分方法。LINQ to SQL - 在部分类中更新数据上下文对象

public partial class LawEnforcementDataContext 
{ 

    partial void DeleteReservation(Reservation instance) 
    { 
     // Get ID's of those seated in course 
     var roster = new Roster(this, instance.CourseID); 
     var seated = from r in roster.All 
        where r.WaitingList == false 
        select r.ID; 

     // delete the reservation 
     this.ExecuteDynamicDelete(instance); 

     // get seated id's not in original seated ids 
     var newlySeated = from r in roster.All 
          where r.WaitingList == false && !seated.Contains(r.ID) 
          select r.ID; 

     var reservations = this.Reservations.Where(r => newlySeated.Contains(r.ID)); 

     foreach (var r in reservations) 
     { 
      r.Confirmed = false; 
      // Have tried doing nothing, thinking calling code's db.SubmitChanges() would do the trick 
      //this.ExecuteDynamicUpdate(r); HAVE TRIED THIS 
     } 
     //this.SubmitChanges(); HAVE TRIED THIS 
    } 
} 

正在进行删除,但更新不是。最后几行的评论是我尝试过的一些事情。

任何想法?谢谢!

编辑

这里是我做了什么来解决这个问题:

public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode) 
{ 
    ChangeSet delta = GetChangeSet(); 

    foreach (var res in delta.Deletes.OfType<Reservation>()) 
    { 
     // Get ID's of those seated in course 
     var roster = new Roster(this, res.CourseID); 
     var seated = from r in roster.All 
        where r.WaitingList == false 
        select r.ID; 

     base.SubmitChanges(failureMode); 

     // get seated id's not in original seated ids 
     var newlySeated = from r in roster.All 
          where r.WaitingList == false && !seated.Contains(r.ID) 
          select r.ID; 

     var reservations = this.Reservations.Where(r => newlySeated.Contains(r.ID)); 

     foreach (var r in reservations) 
     { 
      r.Confirmed = false; 
     } 
    } 

    base.SubmitChanges(failureMode); 
} 

我希望这里的问题是,它已经要求GetChangeSet()

我建议你在数据上下文覆盖SubmitChanges(),有遵循这种逻辑,而不是...

partial class LawEnforcementDataContext 
{ 
    public override void SubmitChanges(
     System.Data.Linq.ConflictMode failureMode) 
    { 
     ChangeSet delta = GetChangeSet(); 
     foreach (var reservation in delta.Deletes.OfType<Reservation>()) 
     { 
      // etc 
     } 
     base.SubmitChanges(failureMode); 
    } 
} 
+0

我需要删除保留在foreach循环中进行。删除后,我需要再次调用GetChangeSet()吗? – 2009-02-27 15:51:10

这里是一个解释和很好的方法来更新部分类对象: Implementing linqtosql partial DataContext class - how to inspect before/after values

我希望它有帮助。