我的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点之间出现问题,则删除的对象将丢失。 有什么建议?我如何维护我的上下文,因此它不会挂起双实体,并且如果出现问题仍然可以处理回滚功能???