Light12306/ChatRoomServer.Db/ChatDb.cs

196 lines
7.1 KiB
C#

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<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();
}
public async Task<PagedData<AbuseReport>> GetAbuseReportPagedList(int filter, int pageindex, int pagesize)
{
var totalCountParameter = new SqlParameter("totalCount", SqlDbType.BigInt) { Direction = ParameterDirection.Output, Value = 0 };
var list = await Database.SqlQuery<AbuseReport>(
"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<AbuseReport>()
{
Data = list,
TotalCount = (long)totalCountParameter.Value
};
}
public async Task<PagedData<MsgLog>> GetMsgLogList(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<MsgLog>(
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<MsgLog>()
{
Data = list,
TotalCount = (long)totalCountParameter.Value
};
}
public async Task<PagedData<BlockUser>> GetBlockUserList(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<BlockUser>(
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<BlockUser>()
{
Data = list,
TotalCount = (long)totalCountParameter.Value
};
}
public async Task<PagedData<User>> GetUserList(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<User>(
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<User>()
{
Data = list,
TotalCount = (long)totalCountParameter.Value
};
}
public async Task<PagedData<UserConnectLog>> GetConnectionLogList(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<UserConnectLog>(
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<UserConnectLog>()
{
Data = list,
TotalCount = (long)totalCountParameter.Value
};
}
}
}