Beispiel #1
0
        /// <summary>
        /// Заполняет сущность данными из базы данных
        /// </summary>
        /// <typeparam name="TEntity">Сущность</typeparam>
        /// <returns>Возвращает коллекцию элементов из TEnity</returns>
        public async Task <Table <TEntity> > FillEntityAsync <TEntity>()
            where TEntity : class, new()
        {
            var attrManager = new AttributeManager <TEntity>(typeof(TEntity));
            //получаем имя сущности
            string tableName = attrManager.GetClassAttributeValue <TableAttribute, String>(a => (a as TableAttribute).Name);
            // var columns     = attrManager.GetPropertyAttributeValues<ColumnAttribute, string>(a => (a as ColumnAttribute).Name).ToList();
            //колллекция для хранения сущностей
            List <TEntity> entities = new List <TEntity>();

            //создаем подключение к базе данных
            using (_sqlConnection = new SqlConnection(_connectionString))
            {
                //открываем подключение
                await _sqlConnection.OpenAsync();


                //создаем объект для хранения запроса
                using (SqlCommand cmd = new SqlCommand())
                {
                    //занесение в свойство CommandText текст T-SQL запроса
                    cmd.CommandText = $"select * from {tableName}";

                    //занесение в свойство Connection подключение к базеданных
                    cmd.Connection = _sqlConnection;

                    //создание объекта для чтения
                    using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
                    {
                        //чтении данных из бд
                        while (await reader.ReadAsync())
                        {
                            //создание сущности
                            TEntity entity = new TEntity();

                            //заполнение свойст сущности, которые помеченны соответствующими аттрибутами
                            foreach (PropertyInfo prop in typeof(TEntity).GetProperties())
                            {
                                //получение имяни столбца
                                string columnName = (prop.GetCustomAttribute(typeof(ColumnAttribute)) as ColumnAttribute).Name;

                                //заполнение свойства сущности
                                prop.SetValue(entity, reader[columnName]);
                            }
                            //добавление в коллекцию сущностей
                            entities.Add(entity);
                        }
                    }
                }
            }
            return(new Table <TEntity>(entities));
        }