当前位置: 首页>>代码示例>>C#>>正文


C# IServiceProvider.CreateDBContext方法代码示例

本文整理汇总了C#中IServiceProvider.CreateDBContext方法的典型用法代码示例。如果您正苦于以下问题:C# IServiceProvider.CreateDBContext方法的具体用法?C# IServiceProvider.CreateDBContext怎么用?C# IServiceProvider.CreateDBContext使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IServiceProvider的用法示例。


在下文中一共展示了IServiceProvider.CreateDBContext方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: ClearTopicInfo

 public static void ClearTopicInfo(IServiceProvider provider)
 {
     using (var db = provider.CreateDBContext())
         db
             .TopicInfos()
             .Delete();
 }
开发者ID:permyakov,项目名称:janus,代码行数:7,代码来源:DatabaseManager.Aggregates.cs

示例2: CheckTopicInfoIntegrity

        public static void CheckTopicInfoIntegrity(IServiceProvider provider)
        {
            using (var db = provider.CreateDBContext())
            {
                if (db.TopicInfos().Any())
                    return;
                if (!db.Messages().Any())
                    return;
            }

            // Таблица topic_info пустая, а messages не пустая.
            // Нужно обновить корневые метки.
            //
            InitDbAggr(provider, true, SR.Database.NeedRestructure2);
        }
开发者ID:permyakov,项目名称:janus,代码行数:15,代码来源:DatabaseManager.Aggregates.cs

示例3: GetTopicChildren

		private void GetTopicChildren(IServiceProvider provider)
		{
			using (var db = provider.CreateDBContext())
			{
				var q = db.Messages(m => m.TopicID == ID).OrderBy(m => m.ParentID);
				q =
					Config.Instance.ForumDisplayConfig.NewMessagesOnTop
						? q.ThenByDescending(m => m.Date)
						: q.ThenBy(m => m.Date);
				var msgs =
					q
						.Select(
							m =>
								new Msg(provider)
								{
									Parent = this,
									IsChild = true,

									ID = m.ID,
									ParentID = m.ParentID,
									ForumID = m.ForumID,
									Name = m.Name,
									Date = m.Date,
									Subject = m.Subject,
									UserID = m.UserID,
									UserClass = (short)m.UserClass,
									UserNick = m.UserNick,
									IsRead = m.IsRead,
									IsMarked = m.IsMarked,
									Closed = m.Closed,
									ReadReplies = m.ReadReplies,
									LastModerated = m.LastModerated,
									ArticleId = m.ArticleId,
									Rating = m.Rating(),
									Smiles = m.SmileCount(),
									Agrees = m.AgreeCount(),
									Disagrees = m.DisagreeCount(),
									Moderatorials = m.ActiveModeratorialCount()
								})
					.Cast<MsgBase>()
					.ToList();
				foreach (var msg in msgs)
					msg.EndMapping();
			}
		}
开发者ID:rsdn,项目名称:janus,代码行数:45,代码来源:Msg.cs

示例4: InitDbAggr

        public static void InitDbAggr(
            IServiceProvider provider,
            bool showGui,
            string msg)
        {
            if (showGui
                    && MessageBox.Show(
                            string.Format(
                                (!string.IsNullOrEmpty(msg) ? msg + "\n" : string.Empty)
                                    + SR.Database.WarningBeforeAggregateRestructure,
                                ApplicationInfo.ApplicationName),
                            ApplicationInfo.ApplicationName,
                            MessageBoxButtons.OKCancel,
                            MessageBoxIcon.Information) == DialogResult.Cancel)
                return;
            using (var db = provider.CreateDBContext())
            using (var tx = db.BeginTransaction())
            {
                var sw = Stopwatch.StartNew();

                //db.TopicInfos().Delete();

                var recordsProcessed = UpdateTopicInfoByFilter(db, null, null); ;
                tx.Commit();

                if (showGui)
                    MessageBox.Show(
                        string.Format(
                            SR.Database.WarningAfterAggregateRestructure,
                            sw.Elapsed.TotalSeconds,
                            recordsProcessed,
                            0),
                        ApplicationInfo.ApplicationName,
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
开发者ID:permyakov,项目名称:janus,代码行数:36,代码来源:DatabaseManager.Aggregates.cs

示例5: GetOldStyleTopicList

		private static List<MsgBase> GetOldStyleTopicList(
			IServiceProvider provider,
			int forumId,
			SortType sort,
			bool loadAll,
			MsgBase parent)
		{
			using (var db = provider.CreateDBContext())
			{
				var displayConfig = Config.Instance.ForumDisplayConfig;
				var q =
					AppendSortPredicate(db.TopicInfos(ti => ti.ForumID == forumId), sort);
				if (displayConfig.ShowUnreadThreadsOnly)
					q = q.Where(ti => !ti.Message.IsRead || ti.AnswersUnread > 0);
				if (!(loadAll || displayConfig.MaxTopicsPerForum <= 0))
					q = q.Take(displayConfig.MaxTopicsPerForum);

				var msgs =
					q
						.Select(
							ti =>
								new Msg(provider)
								{
									Parent = parent,
									IsChild = false,

									ID = ti.MessageID,
									ParentID = 0,
									ForumID = ti.ForumID,
									Name = ti.Message.Name,
									Date = ti.Message.Date,
									Subject = ti.Message.Subject,
									UserID = ti.Message.UserID,
									UserClass = (short)ti.Message.UserClass,
									UserNick = ti.Message.UserNick,
									IsRead = ti.Message.IsRead,
									IsMarked = ti.Message.IsMarked,
									Closed = ti.Message.Closed,
									ReadReplies = ti.Message.ReadReplies,
									LastModerated = ti.Message.LastModerated,
									ArticleId = ti.Message.ArticleId,
									Rating = ti.SelfRates,
									Smiles = ti.SelfSmiles,
									Agrees = ti.SelfAgrees,
									Disagrees = ti.SelfDisagrees,
									Moderatorials = ti.SelfModeratorials,
									RepliesCount = ti.AnswersCount,
									RepliesUnread = ti.AnswersUnread,
									RepliesRate = ti.AnswersRates,
									RepliesSmiles = ti.AnswersSmiles,
									RepliesAgree = ti.AnswersAgrees,
									RepliesDisagree = ti.AnswersDisagrees,
									RepliesToMeUnread = ti.AnswersToMeUnread,
									RepliesMarked = ti.AnswersMarked,
									RepliesModeratorials = ti.AnswersModeratorials
								})
						.Cast<MsgBase>()
						.ToList();
				foreach (var msg in msgs)
					msg.EndMapping();
				return msgs;
			}
		}
开发者ID:rsdn,项目名称:janus,代码行数:63,代码来源:Msg.cs

示例6: AddBrokenTopicRequests

		private static void AddBrokenTopicRequests(
			IServiceProvider provider,
			IEnumerable<JanusMessageInfo> messages)
		{
			var freshMids = new Dictionary<int, JanusMessageInfo>();
			var parentIds = new Dictionary<int, int>();
			// Собираем все messageId и parentId
			foreach (var msg in messages)
			{
				freshMids[msg.messageId] = msg;
				if (msg.parentId != 0 && !ForumsSubscriptionHelper.IsTrashForum(msg.forumId)) // Skip roots & trash
					parentIds[msg.parentId] = msg.messageId;
			}

			// Удаляем тех родителей, которые уже присутствуют в том же пакете
			foreach (var parentId in parentIds.Keys.ToArray())
				if (freshMids.ContainsKey(parentId))
					parentIds.Remove(parentId);

			using (var dbMgr = provider.CreateDBContext())
			{
				var ids =
					dbMgr
						.Messages()
						.Where(msg => parentIds.Keys.ToArray().Contains(msg.ID))
						.Select(msg => msg.ID);
				// Удаляем тех родителей, которые присутствуют в БД
				foreach (var mid in ids)
					parentIds.Remove(mid);
			}

			// Оборванных веток нет - выходим
			if (parentIds.Count <= 0)
				return;

			provider.LogInfo(
				string.Format(
					parentIds.Count.GetDeclension(
						Resources.BrokenTopicMessage1,
						Resources.BrokenTopicMessage2,
						Resources.BrokenTopicMessage5),
					parentIds.Count,
					parentIds.Values.JoinToStringSeries(30).FirstOrDefault()));
			// Добавляем оставшиеся в запросы топиков
			// TODO: вменяемые строковые константы
			foreach (var mid in parentIds.Values)
				provider
					.GetOutboxManager()
					.DownloadTopics
					.Add(
						Resources.BrokenTopicRequestSource,
						mid,
						Resources.BrokenTopicRequestHint.FormatWith(freshMids[mid].subject));
		}
开发者ID:rsdn,项目名称:janus,代码行数:54,代码来源:MessagesSyncHelper.cs

示例7: MarkMsgsRead

		// 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(@"Элемент последовательности не является сообщением.", nameof(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();
			}
		}
开发者ID:rsdn,项目名称:janus,代码行数:36,代码来源:MessageMarkService.cs

示例8: SetMarkers

        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();
            }
        }
开发者ID:permyakov,项目名称:janus,代码行数:29,代码来源:StateObject.cs

示例9: SetMsgGroupReadReplies

		private static void SetMsgGroupReadReplies(
			IServiceProvider provider,
			IEnumerable<int> mids,
			bool readReplies)
		{
			if (mids == null)
				throw new ArgumentNullException(nameof(mids));

			using (var db = provider.CreateDBContext())
			using (var tx = db.BeginTransaction())
			{
				foreach (var ids in mids.SplitToSeries(provider.MaxInClauseElements()))
				{
					var localIds = ids;
					db
						.Messages(m => localIds.Contains(m.ID))
						.Set(_ => _.ReadReplies, readReplies)
						.Update();
				}
				tx.Commit();
			}
		}
开发者ID:rsdn,项目名称:janus,代码行数:22,代码来源:ForumHelper.cs

示例10: MarkMessagesRead

		/// <summary>
		/// Помечает сообщения до <paramref name="maxId"/> прочитанными,
		/// затем снимает флаг прочтения с укзанных сообщений.
		/// </summary>
		/// <param name="provider"></param>
		/// <param name="maxId">Максимальный ID сообщения, 
		/// который учавствует в выборке.</param>
		/// <param name="unreadIds">Массив ID сообщений, с которых следует 
		/// снять флаг прочитанности</param>
		private static void MarkMessagesRead(
			IServiceProvider provider,
			int maxId,
			IEnumerable<int> unreadIds)
		{
			using (var db = provider.CreateDBContext())
			using (var tx = db.BeginTransaction())
			{
				var affectedIds = new HashSet<int>(
					db
						.Messages(m => m.ID < maxId + 1 && !m.IsRead)
						.Select(m => m.ID)
						.AsEnumerable()
						.Concat(unreadIds));

				// все сообщения до maxId прочитанныe
				db
					.Messages(m => !m.IsRead && m.ID < maxId + 1)
						.Set(_ => _.IsRead, true)
					.Update();

				// указанные сообщения не прочитанныe
				foreach (var series in unreadIds.SplitForInClause(provider))
				{
					var locSeries = series;
					db
						.Messages(m => locSeries.Contains(m.ID))
							.Set(_ => _.IsRead, false)
						.Update();
				}

				// обновляем агрегатную информацию
				DatabaseManager.UpdateTopicInfoSpecified(provider, db, affectedIds);

				tx.Commit();
			}
		}
开发者ID:rsdn,项目名称:janus,代码行数:46,代码来源:ForumHelper.cs

示例11: MarkOlderThan

		private static int MarkOlderThan(
			IServiceProvider provider,
			DateTime? beforeDate,
			DateTime? afterDate,
			bool exceptAnswersMe,
			IEnumerable<int> forumsIds,
			bool asRead)
		{
			// Пометка сообщений. В два этапа. Сначала помечаем,
			// затем пересчёт агрегатов.
			//
			using (var db = provider.CreateDBContext())
			using (var tx = db.BeginTransaction())
			{
				var q = db.Messages(m => m.IsRead != asRead);

				if (beforeDate.HasValue)
				{
					var beforeDateParam =
						new DateTime(
							beforeDate.Value.Year,
							beforeDate.Value.Month,
							beforeDate.Value.Day,
							beforeDate.Value.Hour,
							beforeDate.Value.Minute,
						// Если миллисекунды != 0, то вылетает исключение(OleDBException) - неверный тип, поэтому отрезаем их
							0);
					q = q.Where(m => m.Date < beforeDateParam);
				}

				if (afterDate.HasValue)
				{
					var afterDateParam =
						new DateTime(
							afterDate.Value.Year,
							afterDate.Value.Month,
							afterDate.Value.Day,
							afterDate.Value.Hour,
							afterDate.Value.Minute,
						// Если миллисекунды != 0, то вылетает исключение(OleDBException) - неверный тип, поэтому отрезаем их
							0);
					q = q.Where(m => m.Date > afterDateParam);
				}

				if (forumsIds.Any())
					q = q.Where(m => forumsIds.Contains(m.ForumID));

				if (exceptAnswersMe)
					q = q.Where(m => m.Parent.UserID == Config.Instance.SelfId);

				// Akasoft: Вот тут я удавился, добавляя параметром @uid. Пришлось заменить на String.Format(). 
				// 2 вечера отладки, полная фигня 2, ведь ниже-то всё работает...

				// Обновление агрегатов делаем в два этапа.
				// В начале просто сбрасываем все данные о прочтении в topic_info
				// для всех указанных форумов.
				// Затем смотрим в тех же форумах, есть ли в них непрочитанные сообщения
				// и сколько.
				// По полученным данным обновляем topic_info.
				var res =
					q
						.Set(_ => _.IsRead, () => asRead)
						.Update();
				if (res == 0)
					return 0;
				db
					.TopicInfos(ti => forumsIds.Contains(ti.ForumID))
						.Set(_ => _.AnswersUnread, 0)
						.Set(_ => _.AnswersToMeUnread, 0)
					.Update();

				var q1 = db.Messages(m => m.TopicID == 0);
				if (forumsIds.Any())
					q1 = q1.Where(m => forumsIds.Contains(m.ForumID));
				var q2 =
					from ma in q1
					join mb in
						(from im in db.Messages()
						 where im.TopicID != 0 && !im.IsRead
						 group im by im.TopicID
							 into grp
							 select new { TopicID = grp.Key, AnswersUnread = grp.Count() })
						on ma.ID equals mb.TopicID into ljb
					from mb in ljb
					join mc in
						(from im in db.Messages()
						 where
							 im.TopicID != 0
								 && !im.IsRead
								 && im.Parent.UserID == Config.Instance.SelfId
						 group im by im.TopicID
							 into grp
							 select new { TopicID = grp.Key, AnswersMeUnread = grp.Count() })
						on ma.ID equals mc.TopicID into ljc
					from mc in ljc
					where !ma.IsRead || mb.AnswersUnread > 0
					select new { ma.ID, mb.AnswersUnread, mc.AnswersMeUnread };
				var topics = q2.ToList();

				foreach (var item in topics)
//.........这里部分代码省略.........
开发者ID:rsdn,项目名称:janus,代码行数:101,代码来源:ForumHelper.cs

示例12: GetTeamList

        public static string GetTeamList(IServiceProvider provider)
        {
            var usersCount = 0; // счетчик пользователей таблицы по форумам
            var forumDescript = string.Empty;
            var forumName = string.Empty;

            var sb = new StringBuilder(); // конечный результат таблицы по форумам
            var sbSubtotal = new StringBuilder(); // Строка таблицы  по форумам

            var colCount = 0;
            using (var db = provider.CreateDBContext())
            {
                var users =
                    db
                        .Messages(
                            m =>
                                m.UserClass == UserClass.Admin
                                    || m.UserClass == UserClass.Moderator
                                    || m.UserClass == UserClass.Team)
                        .OrderBy(u => u.ID)
                        .Select(
                            m =>
                                new
                                {
                                    ForumName = m.ServerForum.Name,
                                    ForumDesc = m.ServerForum.Descript,
                                    m.UserClass,
                                    m.UserID,
                                    UserName = m.User.DisplayName()
                                });
                foreach (var user in users)
                {
                    if (forumName != user.ForumName)
                    {
                        if (!string.IsNullOrEmpty(forumName))
                        {
                            colCount++;
                            sb.AppendFormat(_tlTableRow,
                                (colCount % 2 == 0 ? _evenColor : _oddColor),
                                forumDescript,
                                forumName,
                                sbSubtotal,
                                usersCount);
                            sbSubtotal.Length = 0;
                            usersCount = 0;
                        }

                        forumDescript = user.ForumDesc;
                        forumName = user.ForumName;
                    }

                    sbSubtotal.AppendFormat(
                        _tlUsersList,
                        JanusFormatMessage.GetUserImagePath(provider, user.UserClass),
                        user.UserID,
                        user.UserName,
                        JanusFormatMessage.FormatUserClass(user.UserClass, true));
                    usersCount++;
                }
            }

            return String.Format(GetStringTemplate("StandartPage.html"),
                SR.ForumTeamList,
                "80%",
                SR.ForumTeam,
                SR.ForumTeamList,
                sb,
                Path.Combine(ApplicationManager.HomeDirectoryPath, "styles/"));
        }
开发者ID:permyakov,项目名称:janus,代码行数:69,代码来源:HtmlPageBuilder.cs

示例13: SearchMessagesByLucene

		/// <summary>
		/// Поиск и выборка данных с использованием Lucene
		/// </summary>
		public static List<MsgBase> SearchMessagesByLucene(
			IServiceProvider provider,
			int forumId,
			string searchText,
			bool searchInText,
			bool searchInSubject,
			bool searchAuthor,
			bool searchInMarked,
			bool searchInMyMessages,
			bool searchAnyWords,
			bool searchInQuestions,
			DateTime from,
			DateTime to)
		{
			provider.LogInfo("Начат поиск...");
			var maxInClause = provider.MaxInClauseElements();

			provider.LogInfo("Используется lucene...");

			var mids =
				Search(
					forumId,
					searchText,
					searchInText,
					searchInSubject,
					searchAuthor,
					//searchInMarked,
					searchInMyMessages,
					searchAnyWords,
					//searchInQuestions,
					from,
					to);

			if (mids.Count == 0)
				return new List<MsgBase>(); // Ничего не нашли, вернём пустой список

			if (mids.Count > maxInClause)
				mids = Algorithms.GetFirstElements(mids, maxInClause);
			var intMids = mids.Select(int.Parse);

			using (var db = provider.CreateDBContext())
			{
				var q = db.Messages(m => intMids.Contains(m.ID));
				q = q.OrderByDescending(m => m.ID);

				// Обработка вопросов
				if (searchInQuestions)
					q = q.Where(m => m.TopicID == 0);

				// Обработка пометок пользователя
				if (searchInMarked)
					q = q.Where(m => m.IsMarked);

				var maxResults = Config.Instance.SearchConfig.MaxResultInSelect;
				if (maxResults > 0)
					q = q.Take(maxResults);

				var msgTable = db.Messages();
				var msgs =
					q
						.Select(
							m =>
								new LinearTreeMsg(provider)
								{
									ID = m.ID,
									ForumID = m.ForumID,
									TopicIDInternal = m.TopicID,
									ParentID = m.ParentID,
									Date = m.Date,
									UserID = m.UserID,
									UserNick = m.UserNick,
									UserClass = (short)m.UserClass,
									Subject = m.Subject,
									IsRead = m.IsRead,
									Rating = m.Rating(),
									Smiles = m.SmileCount(),
									Agrees = m.AgreeCount(),
									Disagrees = m.DisagreeCount(),
									RepliesCount = msgTable.Count(im => im.ParentID == m.ID),
								});
				var list =
					msgs
						.Cast<MsgBase>()
						.ToList();
				foreach (var msg in list)
					msg.EndMapping();
				return list;
			}
		}
开发者ID:rsdn,项目名称:janus,代码行数:92,代码来源:SearchHelper.cs


注:本文中的IServiceProvider.CreateDBContext方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。