我读过一篇9年前写的问答,这里有链接:实体框架-工作单元、存储库和IDisposable -堆栈溢出
这表明它应该实现IDisposable
。但YouTube上发布的其他视频没有。它现在应该实现IDisposable
接口吗?
当没有实体具有外键关联的事务时,如何回滚?
public class Employee
{
public long Id { get; set; }
public string Name { get; set; }
public long DepartmentId { get; set; }
}
public class Department
{
public long Id { get; set; }
public string Name { get; set; }
}
public void AddDepartmentAndEmployees()
{
var department = new Department { Name = "Dev" };
var employees = new List<Employee>
{
new Employee { Name = "Jack" },
new Employee { Name = "Tim" },
}
_departmentRepository.Add(department);
_departmentRepository.SaveChange();
employees.All(e => e.DepartmentId = department.Id );
// if there throw a unknown exception
// and how can i roll back?
_employeeRespository.AddRange(employees);
_departmentRepository.SaveChange();
}
解决以上两个问题。
很抱歉我的英语不好,但是我已经尽力了。
2条答案
按热度按时间lsmd5eda1#
这可能会帮助您Transactions in unit of work design pattern
最佳做法是根据Microsoft article about UnitOfWork Design Pattern将UnitOfWork一次性使用
可以使用TransactionScope创建事务,并在遇到任何问题时提交或回滚事务
wko9yo5t2#
可以使用以下方法在数据库中正确处理CRUD
使用数据库事务:使用数据库作为资料档案库时,可以将资料档案库操作 Package 在数据库事务处理中,以确保这些操作都成功完成,或者在任何操作失败时回退所有更改。这有助于保证资料档案库中数据的完整性。
实施隔离级别:使用数据库作为资料档案库时,可以使用隔离级别来控制事务处理之间以及事务处理与资料档案库中其他数据之间的交互方式。这有助于防止脏读、不可重复读和幻像读等问题。
使用开放式并发:乐观并发可用于在多个事务尝试修改资料档案库中的相同数据时检测和解决冲突。这有助于防止更新丢失并确保资料档案库中数据的完整性。
使用锁:锁可用于防止多个事务处理同时修改资料档案库中的同一数据。这有助于防止冲突并确保数据的完整性。
实现错误处理:正确的错误处理有助于确保事务能够从错误中正常恢复并继续处理,而不是完全失败。这有助于提高资料档案库和使用它的事务的可靠性和健壮性。