Csharp/C#教程:如何根据数据库第一种方法(.edmx)的父删除自动删除子项?分享


如何根据数据库第一种方法(.edmx)的父删除自动删除子项?

以下是我的2级分享1对多关系:

public partial class Employee { public int Id { get; set; } public string Name { get; set; } public virtual ICollection Skills { get; set; } } public partial class Skills { public int Id { get; set; } public Nullable EmployeeId { get; set; } public string Skills { get; set; } public virtual Employee Employee { get; set; } } 

现在我试图通过以下方式删除具有相应技能的员工:

1)仅使用保存更改删除1方法中的员工和技能。 我想我会在这种情况下获得性能优势,因为我只需要调用保存更改一次但是还有1个问题,如果技能被删除但是如果在删除员工时发生错误,那么我将失去相应员工的技能。

 public void Delete(int[] ids) { using (var context = new MyEntities()) { context.Skills.RemoveRange(context.Skills.Where(cd => ids.Contains(cd.EmployeeId))); context.Employee.RemoveRange(context.Employee.Where(t => ids.Contains(t.Id))); context.SaveChanges(); } } 

2)另一种选择是使用事务来确保两者和子项都被成功删除,如下所示:

 public HttpResponseMessage Delete(int[] ids) { using (var context = new MyEntities()) { using (var transaction = context.Database.BeginTransaction()) { try { DeleteSkills(ids,context); DeleteEmployees(ids,context); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); // throw exception. } } } } public void DeleteEmployees(int[] ids,MyEntities _context) { _context.Employee.RemoveRange(_context.Employee.Where(t => ids.Contains(t.Id))); _context.SaveChanges(); } public void DeleteSkills(int[] ids, MyEntities _context) { _context.Skills.RemoveRange(_context.Skills.Where(cd => ids.Contains(cd.EmployeeId))); _context.SaveChanges(); } 

3)我正在寻找一个选项,我不需要明确删除子(技能),并且基于父(Employee)实体的删除自动删除子项,就像它在Code第一次Cascade删除时发生的方式一样我不必触发2个查询来删除父母和孩子(我的第一个选项)或者我不必维护交易(我的第二个选项。)

我做了一些研究,但在数据库第一种方法(.edmx)的情况下,基于删除父项自动删除子项无法找到任何帮助。

什么是处理这种情况的有效方法?

上述就是C#学习教程:如何根据数据库第一种方法(.edmx)的父删除自动删除子项?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/955872.html

(0)
上一篇 2021年11月21日
下一篇 2021年11月21日

精彩推荐