LINQ to SQL-更新局部类中的数据上下文对象 [英] LINQ to SQL - Updating Data Context Objects in Partial Classes
问题描述
我已经创建了一种可扩展性方法,用于删除我的Linq To Sql对象之一,称为保留.
I have created an extensibility method for deleting one of my Linq To Sql objects called Reservation.
好吧,在我创建的这种局部方法中,我想更新一些其他对象.我似乎无法使更新保留在数据库中.这是我删除预订的部分方法.
Well, in this partial method I created, I want to update some other objects. I can't seem to get the update to be persisted in the database. Here is my partial method for deleting the reservation.
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
}
}
正在删除,但没有进行更新.在最后几行中评论了我尝试过的一些事情.
The delete is taking place but the update is not. Commented in the last few lines are some of the things I have tried.
有什么想法吗?谢谢!
编辑
这是我为解决此问题所做的事情:
Here is what I have done to solve 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()
.
I expect the problem here is that it has already called GetChangeSet()
.
我建议您在数据上下文中覆盖SubmitChanges()
,并在此应用此逻辑...
I suggest you override SubmitChanges()
at the data-context, and apply this logic there instead...
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);
}
}
这篇关于LINQ to SQL-更新局部类中的数据上下文对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!