UpdateTopicInfoRange() public static method

public static UpdateTopicInfoRange ( IServiceProvider provider, IDataContext db, IEnumerable tids ) : void
provider IServiceProvider
db IDataContext
tids IEnumerable
return void
Beispiel #1
0
        private static void SetMarkers(
            IServiceProvider provider,
            IEnumerable <int> mids,
            IEnumerable <int> tids,
            int maxMsgId,
            bool clearOther)
        {
            if (mids == null)
            {
                throw new ArgumentNullException("mids");
            }

            using (var db = provider.CreateDBContext())
                using (var tx = db.BeginTransaction())
                {
                    if (clearOther)
                    {
                        ClearMarkers(db, maxMsgId);
                    }

                    foreach (var series in mids.SplitForInClause(provider))
                    {
                        var locSeries = series;
                        db
                        .Messages(m => locSeries.Contains(m.ID))
                        .Set(_ => _.IsMarked, true)
                        .Update();
                    }
                    DatabaseManager.UpdateTopicInfoRange(provider, db, tids);

                    tx.Commit();
                }
        }
        // ReSharper restore FunctionNeverReturns

        private static void MarkMsgsRead(
            IServiceProvider provider,
            IEnumerable <ForumEntryIds> msgIds,
            bool isRead)
        {
            var msgIdsArray = msgIds.ToArray();

            if (msgIdsArray.Any(ids => ids.GetEntryType() != ForumEntryType.Message))
            {
                throw new ArgumentException(@"Элемент последовательности не является сообщением.", "msgIds");
            }

            using (var db = provider.CreateDBContext())
                using (var tx = db.BeginTransaction())
                {
                    foreach (var series in
                             msgIds
                             .Select(ids => ids.MessageId)
                             .SplitForInClause(provider))
                    {
                        var locSeries = series;
                        db
                        .Messages(m => locSeries.Contains(m.ID))
                        .Set(_ => _.IsRead, isRead)
                        .Update();
                    }

                    DatabaseManager.UpdateTopicInfoRange(
                        provider,
                        db,
                        msgIdsArray
                        .Select(ids => ids.TopicId.GetValueOrDefault())
                        .Distinct());

                    tx.Commit();
                }
        }