Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
                    }
                }
            }
        }