/// <summary> /// 检测被删除的数据是否存在引用它的数据 /// </summary> /// <param name="dm"></param> /// <param name="modalcontext"></param> /// <param name="d"></param> /// <param name="view"></param> /// <returns></returns> private bool CheckDeleteRefenceExists( IDataModel dm, IDataUpdateContext modalcontext, DeleteCheckRefenceAttribute d, out long fid) { Type rd = d.CheckModalType; if (rd == null) { rd = modalcontext.ModalType; } fid = (long)modalcontext.Data.GetPropertyValue("Id"); List <string> filternames = new List <string>(); List <object> filtervalues = new List <object>(); filternames.Add(d.RefenceFieldName); filtervalues.Add(fid); string softkey = rd.GetDataModel().GetSoftDeleteFieldName(); if (!string.IsNullOrEmpty(softkey)) { filternames.Add(softkey); filtervalues.Add(false); } return(CurrentSelector.GetDataByFieldEqValue(rd, filternames, filtervalues, new string[] { "Id" }) != null); }
/// <summary> /// 删除时检测被引用的数据 /// </summary> /// <param name="dm"></param> /// <param name="modalcontext"></param> /// <param name="errors"></param> /// <param name="view"></param> private void CheckDeleteRefence( IDataModel dm, IDataUpdateContext modalcontext, IList <DataModalFieldException> errors) { if (modalcontext.ModalState != ModalState.Delete) { return; } IEnumerable <DeleteCheckRefenceAttribute> x = SelectAttributesFromType <DeleteCheckRefenceAttribute>(modalcontext.ModalType); if (x != null) { foreach (DeleteCheckRefenceAttribute attr in x) { DeleteCheckRefenceAttribute y = attr as DeleteCheckRefenceAttribute; if (y.IsChild) { continue; } long fid; if (CheckDeleteRefenceExists(dm, modalcontext, y, out fid)) { var dm2 = y.CheckModalType != null?y.CheckModalType.GetDataModel() : dm; string note = string.Format(LocalResource.RecordIsRefencedError, dm.DisplayName, dm2.DisplayName, fid); DataModalFieldIsOnRefencedException b = new DataModalFieldIsOnRefencedException("Id", note); errors.Add(b); } } } }