Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataContext更新和回滚_C#_Datacontext_Rollback_Submitchanges - Fatal编程技术网

C# DataContext更新和回滚

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

我的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();
}
如果我之前没有提交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中挂起重复项。