Light12306/ChatRoomServer.Db/ChatDb.cs
2015-07-09 21:06:30 +08:00

99 lines
3.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ChatRoomServer.Db
{
using System.Data.Entity;
using ChatRoomServer.Db.Entities;
public class ChatDb : DbContext
{
static ChatDb()
{
System.Data.Entity.Database.SetInitializer<ChatDb>(null);
}
public ChatDb() :
base(System.Configuration.ConfigurationManager.ConnectionStrings["12306.chat"].ConnectionString)
{
}
/// <summary>
/// This method is called when the model for a derived context has been initialized, but
/// before the model has been locked down and used to initialize the context. The default
/// implementation of this method does nothing, but it can be overridden in a derived class
/// such that the model can be further configured before it is locked down.
/// </summary>
/// <remarks>
/// Typically, this method is called only once when the first instance of a derived context
/// is created. The model for that context is then cached and is for all further instances of
/// the context in the app domain. This caching can be disabled by setting the ModelCaching
/// property on the given ModelBuidler, but note that this can seriously degrade performance.
/// More control over caching is provided through use of the DbModelBuilder and DbContextFactory
/// classes directly.
/// </remarks>
/// <param name="modelBuilder">The builder that defines the model for the context being created. </param>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
var cfg = modelBuilder.Configurations;
cfg.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly());
}
public virtual DbSet<User> Users { get; set; }
public virtual DbSet<Room> Rooms { get; set; }
public virtual DbSet<ServerGroup> ServerGroups { get; set; }
public virtual DbSet<MsgLog> MsgLogs { get; set; }
public virtual DbSet<Announcement> Announcements { get; set; }
public virtual DbSet<OnlineHistory> OnlineHistories { get; set; }
public virtual DbSet<AbuseReport> AbuseReports { get; set; }
public virtual DbSet<UserConnectLog> UserConnectLogs { get; set; }
public virtual DbSet<BlockUser> BlockUsers { get; set; }
/// <summary>
/// 异步获得指定用户的屏蔽列表
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public Task<BlockUser[]> GetBlockRuleForUserAsync(string username)
{
return BlockUsers.SqlQuery("exec usp_BlockUser_GetUserBlockRule {0}", username).ToArrayAsync();
}
/// <summary>
/// 异步获得指定用户的屏蔽列表
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public BlockUser[] GetBlockRuleForUser(string username)
{
return BlockUsers.SqlQuery("exec usp_BlockUser_GetUserBlockRule {0}", username).ToArray();
}
/// <summary>
/// 查询指定用户在单位时间内被举报的人数
/// </summary>
/// <param name="username"></param>
/// <param name="minutes"></param>
/// <returns></returns>
public int GetUserAbuseReportCountInTime(string username, int minutes)
{
return Database.SqlQuery<int>("exec usp_BlockUser_GetUserReportCount {0}, {1}", username, minutes).First();
}
}
}