DeleteNavOneToOne.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace SqlSugar
  7. {
  8. public partial class DeleteNavProvider<Root, T> where T : class, new() where Root : class, new()
  9. {
  10. private void DeleteOneToOne<TChild>(string name, EntityColumnInfo nav) where TChild : class, new()
  11. {
  12. var parentEntity = _ParentEntity;
  13. var parentList = _ParentList.Cast<T>().ToList();
  14. var parentColumn = parentEntity.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name);
  15. var parentPkColumn = parentEntity.Columns.FirstOrDefault(it => it.IsPrimarykey);
  16. var thisEntity = this._Context.EntityMaintenance.GetEntityInfo<TChild>();
  17. EntityColumnInfo thisPkColumn = GetPkColumnByNav(thisEntity, nav);
  18. Check.Exception(thisPkColumn == null, $" Navigate {parentEntity.EntityName} : {name} is error ", $"导航实体 {parentEntity.EntityName} 属性 {name} 配置错误");
  19. if (!_IsDeletedParant)
  20. SetContext(() => this._Context.Deleteable(parentList)
  21. .EnableDiffLogEventIF(_RootOptions?.IsDiffLogEvent == true, _RootOptions?.DiffLogBizData)
  22. .ExecuteCommand());
  23. Check.ExceptionEasy(parentColumn == null, "The one-to-one navigation configuration is incorrect", "一对一导航配置错误");
  24. var ids = _ParentList.Select(it => parentColumn.PropertyInfo.GetValue(it)).ToList();
  25. List<TChild> childList = this._Context.Queryable<TChild>().In(thisPkColumn.DbColumnName, ids).ToList();
  26. this._ParentList = childList.Cast<object>().ToList();
  27. this._ParentPkColumn = thisPkColumn;
  28. this._IsDeletedParant = true;
  29. SetContext(() => this._Context.Deleteable(childList).ExecuteCommand());
  30. }
  31. }
  32. }