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(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(); } } }