DataContext更新和回滚

时间:2012-10-12 12:22:03

标签: c# datacontext rollback submitchanges

我的DataContext出了问题。在下面的代码片段中,我首先删除datacontext中的现有对象,然后再使用相同的代码删除新的对象。问题是,因为我正在使用.DeleteOnSubmit(),它仍然在我的Datacontext中包含2个实体,因此它在我的数据库中正确存储。

这里是代码:

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();
}

如果我在

之前没有提交删除的提交()
    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();
}

然后它可以工作,但该解决方案对于Rollback函数来说很弱,因为它将:  1.删​​除现有对象  2. submitChanges  3.添加新对象  4. submitChanges

但如果在第2点和第3点之间出现问题,则删除的对象将丢失。 有什么建议?我如何维护我的上下文,因此它不会挂起双实体,并且如果出现问题仍然可以处理回滚功能???

0 个答案:

没有答案