private static string CheckLockedPropertySnippet(LockPropertyInfo info) { string propertyName = info.Source.Name; if (info.Source is ReferencePropertyInfo) propertyName += "ID"; return string.Format( @"if (updatedNew.Count() > 0 || deletedIds.Count() > 0) {{ {0}[] changedItems = updated.Zip(updatedNew, (i, j) => ({4}) ? i : null).Where(x => x != null).ToArray(); if (changedItems != null && changedItems.Length > 0) {{ var lockedItems = _domRepository.{0}.Filter(this.Query(changedItems.Select(item => item.ID)), new {1}()); if (lockedItems.Count() > 0) throw new Rhetos.UserException({2}, ""DataStructure:{0},ID:"" + lockedItems.First().ID.ToString() + "",Property:{3}""); }} }} ", info.Source.DataStructure.GetKeyProperties(), info.FilterType, CsUtility.QuotedString(info.Title), propertyName, CompareValuePropertySnippet(propertyName)); }
private static string CheckLockedPropertySnippet(LockPropertyInfo info) { string propertyName = info.Source.Name; if (info.Source is ReferencePropertyInfo) propertyName += "ID"; return string.Format( @" if (updated.Length > 0 || deleted.Length > 0) {{ {0}[] changedItems = updated.Zip(updatedNew, (i, j) => ({4}) ? i : null).Where(x => x != null).ToArray(); if (changedItems != null && changedItems.Length > 0) {{ var lockedItems = _domRepository.{0}.Filter(changedItems.AsQueryable(), new {1}()); if (lockedItems.Count() > 0) throw new Rhetos.UserException({2}, ""DataStructure:{0},ID:"" + lockedItems.First().ID.ToString() + "",Property:{3}""); // Workaround to restore NH proxies if NHSession.Clear() is called inside filter. for (int i=0; i<updated.Length; i++) updated[i] = _executionContext.NHibernateSession.Load<{0}>(updated[i].ID); for (int i=0; i<deleted.Length; i++) deleted[i] = _executionContext.NHibernateSession.Load<{0}>(deleted[i].ID); }} }} ", info.Source.DataStructure.GetKeyProperties(), info.FilterType, CsUtility.QuotedString(info.Title), propertyName, CompareValuePropertySnippet(propertyName)); }