gpt4 book ai didi

c# - 使用 Entity Framework 从数据库中添加和删除数据

转载 作者:搜寻专家 更新时间:2023-10-30 22:08:45 24 4
gpt4 key购买 nike

我在数据库中有几个表,我想删除所有数据并重新填充表,然后才执行保存更改(因为万一保存失败我想返回到旧数据)。

当我从数据库中删除数据然后尝试将数据添加到数据库中时,它失败并显示“不允许添加与处于已删除状态的实体的关系。”,但是当我删除数据时然后保存然后添加新数据并再次保存,一切正常..

这是我的代码,如果它有助于理解问题

// create the new data
SomeDataHolder data = ... ;
// save some data to re-enter back after changes
List<User> usersSave = ctx.Users.ToList();
List<UserPreferences> userPrefsSave = ctx.UserPreferences.ToList();

//clear DB
ctx.UserCourses.RemoveRange(ctx.UserCourses);
ctx.Users.RemoveRange(ctx.Users);
ctx.Specializtions.RemoveRange(ctx.Specializtions);
ctx.Course_Predecessor.RemoveRange(ctx.Course_Predecessor);
ctx.Courses.RemoveRange(ctx.Courses);
ctx.Departments.RemoveRange(ctx.Departments);
ctx.GroupsDetails.RemoveRange(ctx.GroupsDetails);
ctx.LinkTable.RemoveRange(ctx.LinkTable);

下一行使一切正常,没有这一行代码将在下次保存时失败

// ctx.SaveChanges(); 

updateDepartmentsCoursesSpecialization(ctx, data.Specializations);
updateCoursePredecessorsAndParallel(ctx, data.Predecessors);
updateGroupDetails(ctx, data.GroupDetails);
updateLectureToPractice(ctx, data.LinkLectureWithPractice);
ctx.Users.AddRange(usersSave);
ctx.UserPreferences.AddRange(userPrefsSave);

ctx.SaveChanges();

最佳答案

这里你必须使用 Transaction.B'因为你在你的代码库上做不止一个原子操作。通过使用 Transaction,你可以在同一上下文中将多个操作合并到一个事务中。如果其中有任何失败事务将全部回滚。

交易代码片段是这样的:

 using (var ctx = new MyContext()) 
{
using (var dbContextTransaction = ctx.Database.BeginTransaction())
{
try
{
//1st operations here
ctx.GroupsDetails.RemoveRange(ctx.GroupsDetails);
ctx.LinkTable.RemoveRange(ctx.LinkTable);
ctx.SaveChanges();

//2nd operations here
ctx.Users.AddRange(usersSave);
ctx.UserPreferences.AddRange(userPrefsSave);
ctx.SaveChanges();

dbContextTransaction.Commit();
}
catch (Exception)
{
dbContextTransaction.Rollback();
}
}
}

你可以引用这个获取更多信息:Working with Transactions

关于c# - 使用 Entity Framework 从数据库中添加和删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39877450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com