C# DataContext更新和回滚
我的DataContext有问题。在下面的代码段中,我首先删除datacontext中的现有对象,然后在同一代码中再次添加新对象。问题是,由于我使用的是.DeleteOnSubmit(),因此它在我的Datacontext中仍然包含2个实体,而它在我的数据库中正确存储 代码如下:C# DataContext更新和回滚,c#,datacontext,rollback,submitchanges,C#,Datacontext,Rollback,Submitchanges,我的DataContext有问题。在下面的代码段中,我首先删除datacontext中的现有对象,然后在同一代码中再次添加新对象。问题是,由于我使用的是.DeleteOnSubmit(),因此它在我的Datacontext中仍然包含2个实体,而它在我的数据库中正确存储 代码如下: public void ConnectedApartment(Apartment newApartment, Apartment existing) { ConApart ConApartTemp = new
public void ConnectedApartment(Apartment newApartment, Apartment existing)
{
ConApart ConApartTemp = new ConApart();
ConApartTemp.Apartment1 = newApartment;
ConApartTemp.Apartment = existing;
DatabaseConnection.ConAparts.InsertOnSubmit(ConApartTemp);
}
public void opdaterConApart(ArrayList connected, Apartment Apartmenten)
{
foreach (ConApart sam in Apartmenten.ConAparts)
{
DatabaseConnection.ConAparts.DeleteOnSubmit(sam);
}
foreach (ConApart sam2 in Apartmenten.ConAparts1)
{
DatabaseConnection.ConAparts.DeleteOnSubmit(sam2);
}
foreach (Apartment apa in connected)
{
ConnectedApartment(apa, Apartmenten);
}
DatabaseConnection.SubmitChanges();
}
如果我之前没有提交delete的changes()
foreach (Apartment apa in connected)
{
ConnectedApartment(apa, Apartmenten);
}
然后,我的Datacontext将包含2个实体,我的gui将在每次更改时显示重复的实体
如果我使用以下命令:
public void ConnectedApartment(Apartment newApartment, Apartment existing)
{
ConApart ConApartTemp = new ConApart();
ConApartTemp.Apartment1 = newApartment;
ConApartTemp.Apartment = existing;
DatabaseConnection.ConAparts.InsertOnSubmit(ConApartTemp);
}
public void opdaterConApart(ArrayList connected, Apartment Apartmenten)
{
foreach (ConApart sam in Apartmenten.ConAparts)
{
DatabaseConnection.ConAparts.DeleteOnSubmit(sam);
}
foreach (ConApart sam2 in Apartmenten.ConAparts1)
{
DatabaseConnection.ConAparts.DeleteOnSubmit(sam2);
}
DatabaseConnection.SubmitChanges();
foreach (Apartment apa in connected)
{
ConnectedApartment(apa, Apartmenten);
}
DatabaseConnection.SubmitChanges();
}
然后它就可以工作了,但该解决方案对于回滚功能来说很弱,因为它将:
1.删除现有对象
2.提交更改
3.添加新对象
4.提交更改
但如果在第2点和第3点之间出现故障,则删除的对象将丢失。
有什么建议吗?如何维护我的上下文,使其不与双实体挂起,并在出现问题时仍能处理回滚功能?日期上下文的正确回滚过程是:扔掉它(必要时处置它)。数据上下文是短期的工作单元,而不是整个数据库的长期表示。这对于回滚来说是有意义的。但我仍然有一个问题,我需要在添加之前提交对象的删除,以避免在我的DataContext中挂起重复项。