本文整理汇总了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();
}
示例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);
}
示例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();
}
}
示例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);
}
}
示例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;
}
}
示例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));
}
示例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();
}
}
示例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();
}
}
示例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();
}
}
示例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();
}
}
示例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)
//.........这里部分代码省略.........
示例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/"));
}
示例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;
}
}