Light12306/ChatRoomServer.Db/ChatDb.cs

120 lines
4.1 KiB
C#
Raw Normal View History

2015-07-03 21:04:37 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ChatRoomServer.Db
{
2015-07-15 20:55:09 +08:00
using System.Data;
2015-07-03 21:04:37 +08:00
using System.Data.Entity;
2015-07-15 20:55:09 +08:00
using System.Data.SqlClient;
2015-07-03 21:04:37 +08:00
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;
2015-07-08 17:24:45 +08:00
cfg.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly());
2015-07-03 21:04:37 +08:00
}
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; }
2015-07-08 17:24:45 +08:00
public virtual DbSet<AbuseReport> AbuseReports { get; set; }
public virtual DbSet<UserConnectLog> UserConnectLogs { get; set; }
public virtual DbSet<BlockUser> BlockUsers { get; set; }
2015-07-09 21:06:30 +08:00
/// <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();
}
2015-07-15 20:55:09 +08:00
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
};
}
2015-07-03 21:04:37 +08:00
}
}