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);
}
}
答
这里是一个解释和很好的方法来更新部分类对象: Implementing linqtosql partial DataContext class - how to inspect before/after values
我希望它有帮助。
我需要删除保留在foreach循环中进行。删除后,我需要再次调用GetChangeSet()吗? – 2009-02-27 15:51:10