/// <summary>
        /// 获取当前表的所有列和类型
        /// </summary>
        /// <param name="context"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static DataTable GetTableColumns(this IDbContextCore context, string tableName)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            var db  = context.GetDatabase();
            var sql = string.Empty;

            if (db.IsSqlServer())
            {
                sql = "SELECT a.name as ColName," +
                      "CONVERT(bit,(case when COLUMNPROPERTY(a.id,a.name,'IsIdentity')=1 then 1 else 0 end)) as IsIdentity, " +
                      "CONVERT(bit,(case when (SELECT count(*) FROM sysobjects  WHERE (name in (SELECT name FROM sysindexes  WHERE (id = a.id) AND (indid in  (SELECT indid FROM sysindexkeys  WHERE (id = a.id) AND (colid in  (SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))  AND (xtype = 'PK'))>0 then 1 else 0 end)) as IsPrimaryKey," +
                      "b.name as ColumnType," +
                      "COLUMNPROPERTY(a.id,a.name,'PRECISION') as ColumnLength," +
                      "CONVERT(bit,(case when a.isnullable=1 then 1 else 0 end)) as IsNullable,  " +
                      "isnull(e.text,'') as DefaultValue," +
                      "isnull(g.[value], ' ') AS Comments " +
                      "FROM  syscolumns a left join systypes b on a.xtype=b.xusertype  inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' left join syscomments e on a.cdefault=e.id  left join sys.extended_properties g on a.id=g.major_id AND a.colid=g.minor_id left join sys.extended_properties f on d.id=f.class and f.minor_id=0 " +
                      $"where b.name is not null and d.name='{tableName}' order by a.id,a.colorder";
            }
            else
            {
                throw new NotImplementedException("This method does not support current database yet.");
            }

            return(context.GetDataTable(sql));
        }
        private static IEnumerable <T> Execute <T>(this IDbContextCore context, string sql, CommandType type, DbParameter[] sqlParams) where T : new()
        {
            var db         = context.GetDatabase();
            var connection = db.GetDbConnection();
            var cmd        = connection.CreateCommand();

            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
            cmd.CommandText = sql;
            cmd.CommandType = type;
            if (sqlParams != null)
            {
                cmd.Parameters.AddRange(sqlParams);
            }
            IEnumerable <T> result;

            using (var reader = cmd.ExecuteReader())
            {
                result = EntityMapper.MapToEntities <T>(reader);
            }

            connection.Close();
            return(result);
        }
Beispiel #3
0
        internal void GenerateAllCodesFromDatabase(IDbContextCore dbContext, bool ifExsitedCovered = false, Func <DbTable, bool> selector = null)
        {
            var tables = dbContext.GetCurrentDatabaseTableList();

            if (tables != null && tables.Any())
            {
                if (selector == null)
                {
                    selector = m => true;
                }
                tables = tables.Where(selector).ToList();
                foreach (var table in tables)
                {
                    if (table.Columns.Any(c => c.IsPrimaryKey))
                    {
                        var pkTypeName = table.Columns.First(m => m.IsPrimaryKey).CSharpType;
                        GenerateEntity(table, ifExsitedCovered);
                        GenerateIRepository(table.TableName.ToPascalCase(), pkTypeName, ifExsitedCovered);
                        GenerateRepository(table.TableName.ToPascalCase(), pkTypeName, ifExsitedCovered);
                        GenerateIService(table.TableName.ToPascalCase(), pkTypeName, ifExsitedCovered);
                        GenerateService(table.TableName.ToPascalCase(), pkTypeName, ifExsitedCovered);
                        GenerateController(table.TableName.ToPascalCase(), pkTypeName, ifExsitedCovered);
                        GenerateApiController(table.TableName.ToPascalCase(), pkTypeName, ifExsitedCovered);
                    }
                }
            }
        }
        /// <summary>
        /// 获取所有的表
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public static DataTable GetCurrentDatabaseAllTables(this IDbContextCore context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            var db  = context.GetDatabase();
            var sql = string.Empty;

            if (db.IsSqlServer())
            {
                sql = "select * from (SELECT (case when a.colorder=1 then d.name else '' end) as TableName," +
                      "(case when a.colorder=1 then isnull(f.value,'') else '' end) as TableComment" +
                      " FROM syscolumns a" +
                      " inner join sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'" +
                      " left join sys.extended_properties f on d.id=f.major_id and f.minor_id=0) t" +
                      " where t.TableName!=''";
            }
            else
            {
                throw new NotImplementedException("This method does not support current database yet.");
            }

            return(context.GetDataTable(sql));
        }
        public static IList <DbTable> GetCurrentDatabaseTableList(this IDbContextCore context)
        {
            var tables = context.GetCurrentDatabaseAllTables().ToList <DbTable>();
            var db     = context.GetDatabase();
            //仅支持SQL server
            //DatabaseType dbType;
            //if (db.IsSqlServer())
            //    dbType = DatabaseType.MSSQL;
            //else
            //{
            //    throw new NotImplementedException("This method does not support current database yet.");
            //}

            var dbType = DatabaseType.MSSQL;//仅支持SQL server 有时间补充其他数据库

            tables.ForEach(item =>
            {
                item.Columns = context.GetTableColumns(item.TableName).ToList <DbTableColumn>();
                item.Columns.ForEach(x =>
                {
                    var csharpType = DbColumnTypeCollection.DbColumnDataTypes.FirstOrDefault(t =>
                                                                                             t.DatabaseType == dbType && t.ColumnTypes.Split(',').Any(p =>
                                                                                                                                                      p.Trim().Equals(x.ColumnType, StringComparison.OrdinalIgnoreCase)))?.CSharpType;
                    if (string.IsNullOrEmpty(csharpType))
                    {
                        throw new SqlTypeException($"未从字典中找到\"{x.ColumnType}\"对应的C#数据类型,请更新DbColumnTypeCollection类型映射字典。");
                    }

                    x.CSharpType = csharpType;
                });
            });
            return(tables);
        }
        public static void ClearDataTables(this IDbContextCore context, params string[] tables)
        {
            if (tables == null)
            {
                var tableList = new List <string>();
                var types     = context.GetAllEntityTypes();
                if (types.Any())
                {
                    foreach (var type in types)
                    {
                        var tableName = type.ClrType.GetCustomAttribute <TableAttribute>()?.Name;
                        if (tableName.IsNullOrWhiteSpace())
                        {
                            tableName = type.ClrType.Name;
                        }
                        tableList.Add(tableName);
                    }
                }
                else
                {
                    tableList.AddRange(context.GetCurrentDatabaseTableList().Select(m => m.TableName));
                }

                tables = tableList.ToArray();
            }

            var sql = new StringBuilder();

            foreach (var table in tables)
            {
                sql.AppendLine($"delete from {table};");
            }
            context.ExecuteSqlWithNonQuery(sql.ToString());
        }
        public static ICodeFirst CodeFirst(this IDbContextCore dbContext)
        {
            var codeFirst = AspectCoreContainer.Resolve <ICodeFirst>();

            if (codeFirst == null)
            {
                throw new Exception("请先在Startup.cs文件的ConfigureServices方法中调用UseCodeGenerator方法以注册。");
            }
            return(codeFirst);
        }
Beispiel #8
0
 public BaseUserRepository(IDbContextCore dbContext,
                           IBaseUserRoleMapRepository baseUserRoleMapRepository,
                           IBasePermissionUserRepository basePermissionUserRepository,
                           IBasePermissionRoleRepository basePermissionRoleRepository) : base(dbContext)
 {
     _baseUserRoleMapRepository    = baseUserRoleMapRepository;
     _basePermissionRoleRepository = basePermissionRoleRepository;
     _basePermissionUserRepository = basePermissionUserRepository;
     _userRoleCache = new UserRoleCache(baseUserRoleMapRepository);
     _cache         = new Base_UserModelCache(this);
 }
        public static IDbFirst DbFirst(this IDbContextCore dbContext)
        {
            var dbFirst = ServiceLocator.Resolve <IDbFirst>();

            if (dbFirst == null)
            {
                throw new Exception("请先在Startup.cs文件的ConfigureServices方法中调用UseCodeGenerator方法以注册。");
            }
            dbFirst.DbContext = dbContext;
            return(dbFirst);
        }
 public Base_UserModelCache(IDbContextCore dbContext)
     : base("Base_UserModel", userId =>
 {
     if (userId.IsNullOrEmpty())
     {
         return(null);
     }
     return(new Base_UserBusiness(dbContext).GetDataList("UserId", userId, new Pagination()).FirstOrDefault());
 })
 {
 }
 public UserRepositories(IDbContextCore dbContext) : base(dbContext)
 {
     //插入成功后触发
     Triggers <User> .Inserted += async entry =>
     {
         await DistributedCacheManager.RemoveAsync("Redis_Cache_User");//插入成功后清除缓存以更新
     };
     //修改时触发
     Triggers <User> .Updating += async entry =>
     {
         await DistributedCacheManager.RemoveAsync("Redis_Cache_User");//插入成功后清除缓存以更新
     };
 }
        public void GenerateAllCodesFromDatabase(IDbContextCore dbContext, bool ifExsitedCovered = false, Func <DbTable, bool> selector = null)
        {
            var tables = dbContext.GetCurrentDatabaseTableList();

            if (tables != null && tables.Any())
            {
                if (selector != null)
                {
                    tables = tables.Where(selector).ToList();
                }
                Generate(tables.ToList(), ifExsitedCovered);
            }
        }
        //public AccountController(IUserStore<User, string> userStore)
        //{

        //}

        public AccountController(
            IRoleStore <ApplicationRole, string> roleStore,
            IAuthenticationManager authenticationManager,
            IDbContextCore db,
            ApplicationSignInManager signInManager, //???
            IUserStore <User, string> userStore
            )
        {
            this.db               = db;
            UserManager           = new UserRepo(userStore, db);
            SignInManager         = signInManager;
            RoleManager           = new RoleRepo(roleStore, db);
            AuthenticationManager = authenticationManager;
        }
        public static DataTable GetCurrentDatabaseAllTables(this IDbContextCore context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            var db  = context.GetDatabase();
            var sql = string.Empty;

            if (db.IsSqlServer())
            {
                sql = "select * from (SELECT (case when a.colorder=1 then d.name else '' end) as TableName," +
                      "(case when a.colorder=1 then isnull(f.value,'') else '' end) as TableComment" +
                      " FROM syscolumns a" +
                      " inner join sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'" +
                      " left join sys.extended_properties f on d.id=f.major_id and f.minor_id=0) t" +
                      " where t.TableName!=''";
            }
            else if (db.IsMySql())
            {
                sql =
                    "SELECT TABLE_NAME as TableName," +
                    " Table_Comment as TableComment" +
                    " FROM INFORMATION_SCHEMA.TABLES" +
                    $" where TABLE_SCHEMA = '{db.GetDbConnection().Database}'";
            }
            else if (db.IsNpgsql())
            {
                sql =
                    "select relname as TableName," +
                    " cast(obj_description(relfilenode,'pg_class') as varchar) as TableComment" +
                    " from pg_class c" +
                    " where relkind = 'r' and relname not like 'pg_%' and relname not like 'sql_%'" +
                    " order by relname";
            }
            else if (db.IsOracle())
            {
                sql =
                    "select \"a\".TABLE_NAME as \"TableName\",\"b\".COMMENTS as \"TableComment\" from USER_TABLES \"a\" JOIN user_tab_comments \"b\" on \"b\".TABLE_NAME=\"a\".TABLE_NAME";
            }
            else
            {
                throw new NotImplementedException("This method does not support current database yet.");
            }

            return(context.GetDataTable(sql));
        }
        private static int ExecuteNoQuery <T>(this IDbContextCore context, string sql, DbParameter[] sqlParams) where T : new()
        {
            var db         = context.GetDatabase();
            var connection = db.GetDbConnection();
            var cmd        = connection.CreateCommand();

            db.OpenConnection();
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.Text;
            if (sqlParams != null)
            {
                cmd.Parameters.AddRange(sqlParams);
            }
            var result = cmd.ExecuteNonQuery();

            db.CloseConnection();
            return(result);
        }
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            IPrincipal user = filterContext.HttpContext.User;

            if (user != null && user.Identity.IsAuthenticated)
            {
                IDbContextCore dbiLOGIS = AutofacDependencyResolver.Current.ApplicationContainer.Resolve <IDbContextCore>();
                var            UserRepo = new UserRepo(new ApplicationUserStore <User>((DbContext)dbiLOGIS), dbiLOGIS);
                User           usr      = UserRepo.FindById(user.Identity.GetUserId());

                if (usr != null)
                {
                    TimeSpan ts = DateTime.Today - usr.LastPasswordChangedDate;

                    // If true, that means the user's password expired
                    // Let's force him to change his password before using the application

                    if (ts.TotalDays > PasswordExpiresInDays && PasswordExpiresInDays > 0)
                    {
                        //filterContext.HttpContext.Response.Redirect("Login");
                        filterContext.HttpContext.Response.Redirect(
                            string.Format("~/{0}/{1}/{2}?{3}", "IDENTITY", "Manage", "ChangePassword",
                                          "reason=expired"), false);
                        //return;
                    }
                    else if (PasswordExpiresInDays - ts.TotalDays <= 10)
                    {
                        //int numberOfDaysToChangePassword = (int)(PasswordExpiresInDays - ts.TotalDays);
                        //filterContext.HttpContext.Response.Redirect(
                        //    string.Format("~/{0}/{1}?{2}", "Home", "Index",
                        //    "expirationDays=" + numberOfDaysToChangePassword), false);
                    }

                    base.OnAuthorization(filterContext);
                }
                else
                {
                    //base.
                    //Debug.WriteLine()
                    Console.WriteLine("nieznany user");
                }
            }
        }
        /// <summary>
        /// 拓展函数,执行sql获取表
        /// </summary>
        /// <param name="context"></param>
        /// <param name="sql"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public static DataTable GetDataTable(this IDbContextCore context, string sql, params DbParameter[] parameters)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            var db = context.GetDatabase();

            db.EnsureCreated();
            var connection = db.GetDbConnection();

            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
            var         ds = new DataSet();
            var         dt = new DataTable();
            DbCommand   cmd;
            DataAdapter da;

            if (db.IsSqlServer())
            {
                cmd = new SqlCommand(sql, (SqlConnection)connection);
                if (parameters != null && parameters.Length > 0)
                {
                    cmd.Parameters.AddRange(parameters);
                }

                da = new SqlDataAdapter((SqlCommand)cmd);
            }
            else
            {
                throw new NotSupportedException("This method does not support current database yet.");
            }

            da.Fill(ds);
            dt = ds.Tables[0];
            da.Dispose();
            connection.Close();
            return(dt);
        }
        public static object ExecuteScalar(this IDbContextCore context, string sql, params DbParameter[] sqlParams)
        {
            var db         = context.GetDatabase();
            var connection = db.GetDbConnection();
            var cmd        = connection.CreateCommand();

            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.Text;
            if (sqlParams != null)
            {
                cmd.Parameters.AddRange(sqlParams);
            }

            var result = cmd.ExecuteScalar();

            connection.Close();
            return(result);
        }
        public static IList <DbTable> GetCurrentDatabaseTableList(this IDbContextCore context)
        {
            var          tables = context.GetCurrentDatabaseAllTables().ToList <DbTable>();
            var          db     = context.GetDatabase();
            DatabaseType dbType;

            if (db.IsSqlServer())
            {
                dbType = DatabaseType.MSSQL;
            }
            else if (db.IsMySql())
            {
                dbType = DatabaseType.MySQL;
            }
            else if (db.IsNpgsql())
            {
                dbType = DatabaseType.PostgreSQL;
            }
            else if (db.IsOracle())
            {
                dbType = DatabaseType.Oracle;
            }
            else
            {
                throw new NotImplementedException("This method does not support current database yet.");
            }
            var columns = context.GetTableColumns(tables.Select(m => m.TableName).ToArray()).ToList <DbTableColumn>();

            tables.ForEach(item =>
            {
                var dt       = context.GetDataTable($"select * from {item.TableName} where 1 != 1");
                item.Columns = columns.Where(m => m.TableName == item.TableName).ToList();
                item.Columns.ForEach(x =>
                {
                    x.CSharpType = dt.Columns[x.ColName].DataType.Name;
                });
            });
            return(tables);
        }
Beispiel #20
0
 public RapidDevelopmentRepository(IDbContextCore dbContext, IHostingEnvironment hostingEnvironment) : base(dbContext)
 {
     _contentRootPath = hostingEnvironment.ContentRootPath;
 }
Beispiel #21
0
 protected BaseRepository(IDbContextCore dbContext)
 {
     DbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
     DbContext.EnsureCreated();
 }
 public PermissionRoleRepository(IDbContextCore dbContext) : base(dbContext)
 {
 }
 public BaseSysRoleRepository(IDbContextCore dbContext) : base(dbContext)
 {
 }
Beispiel #24
0
 public Base_DatabaseLinkController(IDbContextCore dbContext)
 {
     _base_DatabaseLinkBusiness = new Base_DatabaseLinkBusiness(dbContext);
 }
Beispiel #25
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="dbContext"></param>
 public LogRepository(IDbContextCore dbContext) : base(dbContext)
 {
 }
 public TestRepository(IDbContextCore dbContext) : base(dbContext)
 {
 }
 protected BaseRepository([FromServices] IDbContextCore dbContext)
 {
     DbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
     DbContext.EnsureCreatedAsync();
 }
 public BaseDatabaseLinkRepository(IDbContextCore dbContext) : base(dbContext)
 {
 }
Beispiel #29
0
 public FilterIPRepository(IDbContextCore dbContext) : base(dbContext)
 {
 }
Beispiel #30
0
 public PbdmOrganRepository(IDbContextCore dbContext) : base(dbContext)
 {
 }