コード例 #1
0
        public void UpdateGraphWithChildDeletes(ProductLine productLine)
        {
            if (productLine == null)
            {
                throw new ArgumentNullException(nameof(productLine), $"{nameof(productLine)} is null.");
            }

            productLine.ApplyKeys();

            //Note: This could all be done in a single query transaction leveraging the MERGE feature
            using (var con = OpenConnection())
                using (var trans = con.BeginTransaction())
                {
                    //Find products
                    var originalProductKeys = BuildGetProductKeys(productLine.ProductLineKey).Execute(trans);

                    foreach (var item in productLine.Products)
                    {
                        originalProductKeys.Remove(item.ProductKey);
                    }

                    //Leverage DbConnector's Job Batching feature
                    DbJob.ExecuteAll(trans, BuildUpdateProductLine(productLine), BuildInsertOrUpdateProducts(productLine.Products));

                    //Remove products
                    if (originalProductKeys.Count > 0)
                    {
                        BuildDeleteProducts(originalProductKeys).Execute(trans);
                    }

                    trans.Commit();
                }
        }
コード例 #2
0
        public int Create(ProductLine productLine)
        {
            if (productLine == null)
            {
                throw new ArgumentNullException(nameof(productLine), $"{nameof(productLine)} is null.");
            }

            const string sql = "INSERT INTO Production.ProductLine ( ProductLineName ) OUTPUT Inserted.ProductLineKey VALUES (@ProductLineName);";

            //Build the main IDbJob.
            IDbJob <int> jobProductLine = DbConnector
                                          .Scalar <int>(sql, productLine)
                                          .OnExecuted((int result, IDbExecutedModel im) =>
            {
                productLine.ProductLineKey = result;
                productLine.ApplyKeys();
                return(result);
            });

            if (productLine.Products.Count == 0)
            {
                return(jobProductLine.Execute());
            }
            else
            {
                //Leverage DbConnector's Job Batching feature
                DbJob.ExecuteAll(jobProductLine, BuildInsertOrUpdateProducts(productLine.Products));

                return(productLine.ProductLineKey);
            }
        }
コード例 #3
0
        public void UpdateGraph(ProductLine productLine)
        {
            if (productLine == null)
            {
                throw new ArgumentNullException(nameof(productLine), $"{nameof(productLine)} is null.");
            }

            productLine.ApplyKeys();

            //Leverage DbConnector's Job Batching feature
            DbJob.ExecuteAll(BuildUpdateProductLine(productLine), BuildInsertOrUpdateProducts(productLine.Products));
        }
コード例 #4
0
        public void JoinedExecution_Custom_Transaction()
        {
            using (var conn = new SqlConnection(TestBase.ConnectionString))
            {
                conn.Open();

                using (var transaction = conn.BeginTransaction())
                {
                    IDbJob <int?> jobInsert = _dbConnector.NonQuery((cmd) =>
                    {
                        cmd.CommandText = @"
                            INSERT INTO [Production].[Location]
                                ([Name]
                                ,[CostRate])
                            VALUES
                                (@Name
                                ,@CostRate)
                        ";

                        cmd.Parameters.AddFor(new
                        {
                            Name     = "9102",
                            CostRate = 5
                        });
                    });

                    IDbJob <int?> jobDelete = _dbConnector.NonQuery((cmd) =>
                    {
                        cmd.CommandText = @"
                        DELETE FROM [Production].[Location] WHERE Name = @Name
                    ";

                        cmd.Parameters.AddFor(new
                        {
                            Name     = "9102",
                            CostRate = 5
                        });
                    });

                    var result = DbJob.ExecuteAll(transaction, jobInsert, jobDelete);

                    transaction.Commit();

                    Assert.NotNull(result);
                    Assert.Equal(1, result[0].Item2);
                    Assert.Equal(1, result[1].Item2);
                }
            }
        }
コード例 #5
0
        public void UpdateGraphWithDeletes(ProductLine productLine, IList <int> productKeysToRemove)
        {
            if (productLine == null)
            {
                throw new ArgumentNullException(nameof(productLine), $"{nameof(productLine)} is null.");
            }

            productLine.ApplyKeys();

            if (productKeysToRemove == null || productKeysToRemove.Count == 0)
            {
                DbJob.ExecuteAll(BuildUpdateProductLine(productLine), BuildInsertOrUpdateProducts(productLine.Products));
            }
            else
            {
                DbJob.ExecuteAll(BuildUpdateProductLine(productLine), BuildInsertOrUpdateProducts(productLine.Products), BuildDeleteProducts(productKeysToRemove));
            }
        }
コード例 #6
0
        public void JoinedExecution_Exception()
        {
            Assert.Throws <Exception>(() =>
            {
                IDbJob <int?> jobInsert = _dbConnector.NonQuery((cmd) =>
                {
                    cmd.CommandText = @"
                            INSERT INTO [Production].[Location]
                                ([Name]
                                ,[CostRate])
                            VALUES
                                (@Name
                                ,@CostRate)
                        ";

                    cmd.Parameters.AddFor(new
                    {
                        Name     = "9200",
                        CostRate = 5
                    });
                });

                IDbJob <int?> jobDelete = _dbConnector.NonQuery((cmd) =>
                {
                    cmd.CommandText = @"
                        DELETE FROM [Production].[Location] WHERE Name = @Name
                    ";

                    cmd.Parameters.AddFor(new
                    {
                        Name     = "9200",
                        CostRate = 5
                    });

                    throw new System.Exception("Test Exception!");
                });

                var result = DbJob.ExecuteAll(jobInsert, jobDelete);
            });
        }
コード例 #7
0
        public void JoinedExecution()
        {
            IDbJob <int?> jobInsert = _dbConnector.NonQuery((cmd) =>
            {
                cmd.CommandText = @"
                    INSERT INTO [Production].[Location]
                        ([Name]
                        ,[CostRate])
                    VALUES
                        (@Name
                        ,@CostRate)
                ";

                cmd.Parameters.AddFor(new
                {
                    Name     = "9100",
                    CostRate = 5
                });
            });

            IDbJob <int?> jobDelete = _dbConnector.NonQuery((cmd) =>
            {
                cmd.CommandText = @"
                    DELETE FROM [Production].[Location] WHERE Name = @Name
                ";

                cmd.Parameters.AddFor(new
                {
                    Name     = "9100",
                    CostRate = 5
                });
            });

            var result = DbJob.ExecuteAll(jobInsert, jobDelete);

            Assert.NotNull(result);
            Assert.Equal(1, result[0].Item2);
            Assert.Equal(1, result[1].Item2);
        }
コード例 #8
0
        public void NonQueries()
        {
            var jobInsert = _dbConnector.NonQueries((cmds) =>
            {
                cmds.Enqueue((cmd) =>
                {
                    cmd.CommandText = @"
                            INSERT INTO [Production].[Location]
                                ([Name]
                                ,[CostRate])
                            VALUES
                                (@Name
                                ,@CostRate)
                        ";

                    cmd.Parameters.AddFor(new
                    {
                        Name     = "9021",
                        CostRate = 5
                    });
                });

                cmds.Enqueue((cmd) =>
                {
                    cmd.CommandText = @"
                            INSERT INTO [Production].[Location]
                                ([Name]
                                ,[CostRate])
                            VALUES
                                (@Name
                                ,@CostRate)
                        ";

                    cmd.Parameters.AddFor(new
                    {
                        Name     = "9031",
                        CostRate = 6
                    });
                });
            });

            var jobDelete = _dbConnector.NonQuery((cmd) =>
            {
                cmd.CommandText = @"
                    DELETE FROM [Production].[Location] WHERE Name = @Name OR Name = @Name2;
                ";

                cmd.Parameters.AddFor(new
                {
                    Name  = "9021",
                    Name2 = "9031",
                });
            });

            var results = DbJob.ExecuteAll(jobInsert, jobDelete);

            Assert.NotNull(results.First().Item2);
            Assert.Equal(2, results.First().Item2);

            Assert.NotNull(results[1].Item2);
            Assert.Equal(2, results[1].Item2);
        }