Esempio n. 1
0
        public IEnumerable <T> GetAll()
        {
            SqlQueryGenerator <T> queryGenerator = new SqlQueryGenerator <T>();

            string selectQuery = queryGenerator.GenerateSelectQuery(typeof(T));

            using (SqlCommand command = new SqlCommand(selectQuery, _Connection))
            {
                using (SqlDataReader rd = command.ExecuteReader())
                {
                    while (rd.Read())
                    {
                        object obj = Activator.CreateInstance(typeof(T));

                        PropertyInfo[] propertyInfos = obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);

                        foreach (var property in propertyInfos)
                        {
                            property.SetValue(obj, rd[property.Name]);
                        }
                        yield return(obj as T);
                    }
                }
            }
        }
        public async Task <T> GetByIdAsync(int id)
        {
            (string query, QueryParameter[] parameters) = SqlQueryGenerator.GenerateSelectQuery(id);

            return(await template.QuerySingleObjectAsync(query, RowMapper, parameters)
                   .ConfigureAwait(false));
        }
 public async Task <IEnumerable <T> > GetAllConditionalAsync(IQueryCondition condition = null)
 {
     (var query, var queryParameters) = SqlQueryGenerator.GenerateSelectQuery(condition);
     return(await template.QueryObjectSetAsync(
                query,
                RowMapper,
                queryParameters)
            .ConfigureAwait(false));
 }
        public void GenerateBasicSelectQueryTest()
        {
            string expectedQueryString = "SELECT [Label], [Id] FROM [Hurace].[Sex]";
            var    queryGenerator      = new SqlQueryGenerator <Entities.Sex>();

            (var actualQueryString, var queryParameters) = queryGenerator.GenerateSelectQuery();

            Assert.Equal(expectedQueryString, actualQueryString);
            Assert.Empty(queryParameters);
        }
        public void GenerateSelectWithIdConditionTest()
        {
            string expectedQuery  = "SELECT [Label], [Id] FROM [Hurace].[Sex] WHERE [Id] = @Id0";
            var    queryGenerator = new SqlQueryGenerator <Entities.Sex>();

            (var generatedQuery, var queryParameters) = queryGenerator.GenerateSelectQuery(
                new QueryConditionBuilder()
                .DeclareCondition("Id", QueryConditionType.Equals, 1)
                .Build());

            Assert.Equal(expectedQuery, generatedQuery);
            Assert.Equal(1, queryParameters[0].Value);
        }
        public void GenerateSelectQueryWithConditionsTest()
        {
            string expectedQueryFormat =
                "SELECT [FirstName], [LastName], [DateOfBirth], [ImageUrl], [CountryId], [SexId], [IsRemoved], [Id] " +
                "FROM [Hurace].[Skier] " +
                "WHERE ([Id] != @{0} AND ([FirstName] = @{1} OR [FirstName] = @{2}))";

            var queryGenerator = new SqlQueryGenerator <Entities.Skier>();

            var idExpectedValue         = 15;
            var firstName1ExpectedValue = "Marcel";
            var firstName2ExpectedValue = "Viktoria";

            var conditions = new QueryConditionBuilder()
                             .DeclareConditionNode(
                QueryConditionNodeType.And,
                () => new QueryConditionBuilder().DeclareCondition("Id", QueryConditionType.NotEquals, idExpectedValue),
                () => new QueryConditionBuilder()
                .DeclareConditionNode(
                    QueryConditionNodeType.Or,
                    () => new QueryConditionBuilder().DeclareCondition("FirstName", QueryConditionType.Equals, firstName1ExpectedValue),
                    () => new QueryConditionBuilder().DeclareCondition("FirstName", QueryConditionType.Equals, firstName2ExpectedValue)))
                             .Build();

            (var actualQuery, var queryParameters) = queryGenerator.GenerateSelectQuery(conditions);

            var idParameter =
                queryParameters.First(
                    qp => qp.ParameterName.Contains("Id0", StringComparison.OrdinalIgnoreCase));

            var firstName1Parameter =
                queryParameters.First(
                    qp => qp.ParameterName.Contains("FirstName0", StringComparison.OrdinalIgnoreCase));

            var firstName2Parameter =
                queryParameters.First(
                    qp => qp.ParameterName.Contains("FirstName1", StringComparison.OrdinalIgnoreCase));

            string expectedQuery = string.Format(
                expectedQueryFormat,
                idParameter.ParameterName,
                firstName1Parameter.ParameterName,
                firstName2Parameter.ParameterName);

            Assert.Equal(expectedQuery, actualQuery);
            Assert.Equal(idExpectedValue, idParameter.Value);
            Assert.Equal(firstName1ExpectedValue, firstName1Parameter.Value);
            Assert.Equal(firstName2ExpectedValue, firstName2Parameter.Value);
        }