Example #1
0
        public void AddProducts(List <Product> products)
        {
            try
            {
                SqlConn.Open();

                using (SqlCommand sqlCommand = SqlConn.CreateCommand())
                {
                    sqlCommand.CommandType = CommandType.StoredProcedure;
                    sqlCommand.CommandText = InsertProductsSp;

                    DataTable productsDataTable = products.ToDataTable(p => new
                    {
                        p.Name,
                        p.SupplierId,
                        p.CategoryId,
                        MeasureUnit = ColumnSettings.Build(() => p.MeasureUnit).Name("Quantity Per Unit"),
                        UnitPrice   = p.Price * 1.5m,
                        p.UnitsInStock,
                        p.UnitsOnOrder,
                        p.ReorderLevel,
                        p.Discontinued
                    });

                    sqlCommand.Parameters.AddWithValue("@Products", productsDataTable);

                    sqlCommand.ExecuteNonQuery();
                }
            }
            finally
            {
                SqlConn.Close();
            }
        }
Example #2
0
        public void Validate_SingleMemberProjectionWhereColumnSettingsDoNotHaveANameSet_ShouldThrowAnException()
        {
            Expression <Func <Place, dynamic> > projector = p => ColumnSettings.Build(() => "Hey");
            var columnSettings = (ColumnSettings)Expression.Lambda(projector.Body).Compile().DynamicInvoke();

            projector = projector.Update(Expression.Constant(columnSettings, typeof(ColumnSettings)), projector.Parameters);

            Action projectorValidation = () => new ColumnSettingsNameValidator().Validate(projector);

            Assert.Throws <InvalidOperationException>(projectorValidation);
        }
Example #3
0
        public void ToDataTable_ProjectionThatOnlyHasAColumnSettingsInIt_ShouldGenerateTheColumnWithNoIssue()
        {
            Expression <Func <Person, dynamic> > projector = p => new { DOB1 = ColumnSettings.Build(() => p.DateOfBirth).Name("DOB") };

            DataColumnCollection columns = _people.ToDataTable(projector).Columns;

            DataColumnCollection expectedColumns = new DataTable().Columns;

            expectedColumns.AddRange(new DataColumn[] {
                new DataColumn()
                {
                    ColumnName = "DOB", DataType = typeof(DateTime), AllowDBNull = false
                }
            }
                                     );

            Assert.True(AreColumnsSetEquals(columns, expectedColumns));
        }
Example #4
0
        public void ToDataTable_ProjectUsingColumnSettings_ShouldGenerateColumnBasedOnSettingsPassedInTheProjection()
        {
            Expression <Func <Person, dynamic> > projector = p => ColumnSettings.Build(() => p.FirstName + " " + p.LastName).Name("Full Name");

            DataColumnCollection columns = _people.ToDataTable(projector).Columns;

            DataColumnCollection expectedColumns = new DataTable().Columns;

            expectedColumns.AddRange(new DataColumn[] {
                new DataColumn()
                {
                    ColumnName = "Full Name", DataType = typeof(string), AllowDBNull = true
                }
            }
                                     );

            Assert.True(AreColumnsSetEquals(columns, expectedColumns));
        }
        public void ToDataTable_ProjectionThatHasColumnSettingsInIt_ShouldTakeTheMapperExpressionFromTheColumnSettingAndEvaluateIt()
        {
            // TODO: for fun, inspect this using ILSpy
            Expression <Func <Person, dynamic> > projector =
                p => new { Name = ColumnSettings.Build(() => p.FirstName + " " + p.LastName).Name("F. Name"), IsGettingTaxes = new TaxService().IsIncomingTaxSeason() };

            DataTable dataTable = _people.ToDataTable(projector);

            ParameterExpression projectorParameter = projector.Parameters[0];

            Assert.True(AreDataSetEquals(
                            dataTable,
                            _people.Select(projector.Compile()).ToList(), // when compiles the lambda expression, all the projector parameter references are closured
                            (d, p) => (string)ExecuteMapper(p.Name.Mapper) == (string)d["F. Name"] &&
                            p.IsGettingTaxes == (bool)d["IsGettingTaxes"]
                            )
                        );
        }
Example #6
0
        public void ToDataTable_SingleProjectionThatUsesAColumnSettingInIt_ShouldGenerateTheColumnWithNoIssue()
        {
            var ids = new List <int>()
            {
                1, 2
            };
            Expression <Func <int, dynamic> > projector = i => ColumnSettings.Build(() => i).Name("Id");

            DataColumnCollection columns = ids.ToDataTable(projector).Columns;

            DataColumnCollection expectedColumns = new DataTable().Columns;

            expectedColumns.AddRange(new DataColumn[] {
                new DataColumn()
                {
                    ColumnName = "Id", DataType = typeof(int), AllowDBNull = false
                }
            }
                                     );

            Assert.True(AreColumnsSetEquals(columns, expectedColumns));
        }