using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ChatRoomServer.Db { using System.Data; using System.Data.Entity; using System.Data.SqlClient; using ChatRoomServer.Db.Entities; public class ChatDb : DbContext { static ChatDb() { System.Data.Entity.Database.SetInitializer(null); } public ChatDb() : base(System.Configuration.ConfigurationManager.ConnectionStrings["12306.chat"].ConnectionString) { } /// /// 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. /// /// /// 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. /// /// The builder that defines the model for the context being created. protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); var cfg = modelBuilder.Configurations; cfg.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly()); } public virtual DbSet Users { get; set; } public virtual DbSet Rooms { get; set; } public virtual DbSet ServerGroups { get; set; } public virtual DbSet MsgLogs { get; set; } public virtual DbSet Announcements { get; set; } public virtual DbSet OnlineHistories { get; set; } public virtual DbSet AbuseReports { get; set; } public virtual DbSet UserConnectLogs { get; set; } public virtual DbSet BlockUsers { get; set; } /// /// 异步获得指定用户的屏蔽列表 /// /// /// public Task GetBlockRuleForUserAsync(string username) { return BlockUsers.SqlQuery("exec usp_BlockUser_GetUserBlockRule {0}", username).ToArrayAsync(); } /// /// 异步获得指定用户的屏蔽列表 /// /// /// public BlockUser[] GetBlockRuleForUser(string username) { return BlockUsers.SqlQuery("exec usp_BlockUser_GetUserBlockRule {0}", username).ToArray(); } /// /// 查询指定用户在单位时间内被举报的人数 /// /// /// /// public int GetUserAbuseReportCountInTime(string username, int minutes) { return Database.SqlQuery("exec usp_BlockUser_GetUserReportCount {0}, {1}", username, minutes).First(); } /// /// 将针对指定用户的举报设置为已经处理 /// /// /// public Task SetProcessedByUserNameAsync(string username) { return Database.ExecuteSqlCommandAsync("exec usp_BlockUser_ResetStatusByUserName {0}", username); } /// /// 将针对指定用户的举报设置为已经处理 /// /// public Task MarkProcessedAbuseReportAsync(string target, byte status) { return Database.ExecuteSqlCommandAsync("exec usp_MarkProcessedAbuseReport {0}, {1}", target, status); } public async Task> GetAbuseReportPagedListAsync(int filter, int pageindex, int pagesize) { var totalCountParameter = new SqlParameter("totalCount", SqlDbType.BigInt) { Direction = ParameterDirection.Output, Value = 0 }; var list = await Database.SqlQuery( "exec usp_AbuseReport_GetList @filter,@pagesize,@pageindex,@totalcount out", new SqlParameter("filter", SqlDbType.Int) { Value = filter }, new SqlParameter("pagesize", SqlDbType.Int) { Value = pagesize }, new SqlParameter("pageindex", SqlDbType.Int) { Value = pageindex }, totalCountParameter ).ToListAsync(); return new PagedData() { Data = list, TotalCount = (long)totalCountParameter.Value }; } public async Task> GetMsgLogListAsync(string username, int pagesize, int pageindex) { var sp = "exec usp_MsgLog_GetList @pageindex, @pagesize, @user, @count output"; var totalCountParameter = new SqlParameter("count", SqlDbType.BigInt) { Direction = ParameterDirection.Output, Value = 0 }; var list = await Database.SqlQuery( sp, new SqlParameter("pageindex", SqlDbType.Int) { Value = pageindex }, new SqlParameter("pagesize", SqlDbType.Int) { Value = pagesize }, new SqlParameter("user", SqlDbType.VarChar, 100) { Value = username }, totalCountParameter ).ToListAsync(); return new PagedData() { Data = list, TotalCount = (long)totalCountParameter.Value }; } public async Task> GetBlockUserListAsync(string username, int pagesize, int pageindex) { var sp = "exec usp_Block_GetList @pageindex, @pagesize, @user, @count output"; var totalCountParameter = new SqlParameter("count", SqlDbType.BigInt) { Direction = ParameterDirection.Output, Value = 0 }; var list = await Database.SqlQuery( sp, new SqlParameter("pageindex", SqlDbType.Int) { Value = pageindex }, new SqlParameter("pagesize", SqlDbType.Int) { Value = pagesize }, new SqlParameter("user", SqlDbType.VarChar, 100) { Value = username }, totalCountParameter ).ToListAsync(); return new PagedData() { Data = list, TotalCount = (long)totalCountParameter.Value }; } public async Task> GetUserListAsync(string username, int pagesize, int pageindex) { var sp = "exec usp_User_GetList @pageindex, @pagesize, @user, @count output"; var totalCountParameter = new SqlParameter("count", SqlDbType.BigInt) { Direction = ParameterDirection.Output, Value = 0 }; var list = await Database.SqlQuery( sp, new SqlParameter("pageindex", SqlDbType.Int) { Value = pageindex }, new SqlParameter("pagesize", SqlDbType.Int) { Value = pagesize }, new SqlParameter("user", SqlDbType.VarChar, 100) { Value = username ?? "" }, totalCountParameter ).ToListAsync(); return new PagedData() { Data = list, TotalCount = (long)totalCountParameter.Value }; } public async Task> GetConnectionLogListAsync(string username, int pagesize, int pageindex) { var sp = "exec usp_ConnectionLog_GetList @pageindex, @pagesize, @user, @count output"; var totalCountParameter = new SqlParameter("count", SqlDbType.BigInt) { Direction = ParameterDirection.Output, Value = 0 }; var list = await Database.SqlQuery( sp, new SqlParameter("pageindex", SqlDbType.Int) { Value = pageindex }, new SqlParameter("pagesize", SqlDbType.Int) { Value = pagesize }, new SqlParameter("user", SqlDbType.VarChar, 100) { Value = username }, totalCountParameter ).ToListAsync(); return new PagedData() { Data = list, TotalCount = (long)totalCountParameter.Value }; } } }