コード例 #1
0
        public void AddingEmployeeWithCompany()

        {
            var employee = new Employee
            {
                Name = "John",
            };
            var employer = new Company
            {
                Name = "World Inc",
            };

            employer.ParentCompany = employer;
            employee.Employer      = employer;

            using (var db = new UnitTestContext())
            {
                var request = new BulkInsertRequest <Employee>
                {
                    Entities = new List <Employee> {
                        employee
                    },
                    EnableRecursiveInsert      = EnableRecursiveInsert.Yes,
                    AllowNotNullSelfReferences = AllowNotNullSelfReferences.Yes
                };
                db.BulkInsertAll(request);

                var actual = db.Companies.Include(e => e.Employees).Single();
                Assert.AreEqual("World Inc", actual.Name);
                Assert.AreSame(actual, actual.ParentCompany);
                Assert.AreEqual("John", actual.Employees.Single().Name);
            }
        }
コード例 #2
0
        public void AddingCompanyWithEmployee()
        {
            var employee = new Employee
            {
                Name = "John",
            };
            var employer = new Company
            {
                Name = "World Inc",
            };

            employer.ParentCompany = employer;
            employer.Employees.Add(employee);

            using (var db = new CompanyContext())
            {
                var request = new BulkInsertRequest <Company>
                {
                    Entities = new List <Company> {
                        employer
                    },
                    Recursive = true,
                    AllowNotNullSelfReferences = true
                };
                db.BulkInsertAll(request);

                var actual = db.Companies.Include(e => e.Employees).Single();
                Assert.AreEqual("World Inc", actual.Name);
                Assert.AreSame(actual, actual.ParentCompany);
                Assert.AreEqual("John", actual.Employees.Single().Name);
            }
        }
コード例 #3
0
        public void AddingChildWithMother()
        {
            var mother = new Person
            {
                FirstName = "Anna",
                LastName  = "Andersson",
                BirthDate = new DateTime(1980, 1, 1),
            };
            var child = new Person
            {
                FirstName = "Arvid",
                LastName  = "Andersson",
                BirthDate = new DateTime(2018, 1, 1),
                Mother    = mother,
            };

            using (var db = new PeopleContext())
            {
                var request = new BulkInsertRequest <Person>
                {
                    Entities = new List <Person> {
                        child
                    },
                    Recursive = true,
                };
                db.BulkInsertAll(request);

                var people = db.People.ToArray();
                Assert.AreEqual(2, people.Length);
            }
        }
コード例 #4
0
        /*==================================================================================================================================
        * Public Methods
        *=================================================================================================================================*/
        public questStatus PerformBulkInsert(BulkInsertRequest bulkInsertRequest)
        {
            // Initialize
            questStatus status = null;


            // Read Filter
            FilterId   filterId   = new FilterId(bulkInsertRequest.FilterId);
            Filter     filter     = null;
            FiltersMgr filtersMgr = new FiltersMgr(this.UserSession);

            status = filtersMgr.Read(filterId, out filter);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }
            bulkInsertRequest.Filter = filter;


            // Determine if bulk insert filter procedure exists.
            FilterProcedure filterProcedure = null;

            status = _dbBulkInsertMgr.GetFilterProcedure(bulkInsertRequest, "Insert", out filterProcedure);
            if (!questStatusDef.IsSuccessOrWarning(status))
            {
                return(status);
            }

            //  Perform bulk insert filter procedure if exists.
            if (questStatusDef.IsSuccess(status))
            {
                return(PerformBulkInsertFilterProcedure(bulkInsertRequest, filterProcedure));
            }

            // Validate bulk insert request
            BulkInsertResponse bulkInsertResponse = null;

            status = ValidateRequest(bulkInsertRequest, out bulkInsertResponse);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }


            // Generate the SQL
            status = _dbBulkInsertMgr.GenerateBulkInsertSQL(bulkInsertRequest);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }


            // Perform bulk insert.
            status = _dbBulkInsertMgr.PerformBulkInsert(bulkInsertRequest);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }
            return(new questStatus(Severity.Success));
        }
コード例 #5
0
        public void AddingMotherWithChild()
        {
            var child = new Person
            {
                FirstName = "Arvid",
                LastName  = "Andersson",
                BirthDate = new DateTime(2018, 1, 1),
            };
            var mother = new Person
            {
                FirstName = "Anna",
                LastName  = "Andersson",
                BirthDate = new DateTime(1980, 1, 1),
            };

            mother.Children.Add(child);

            using (var db = new UnitTestContext())
            {
                var request = new BulkInsertRequest <Person>
                {
                    Entities = new List <Person> {
                        mother
                    },
                    EnableRecursiveInsert = EnableRecursiveInsert.Yes,
                };
                db.BulkInsertAll(request);

                var people = db.People.ToArray();
                Assert.AreEqual(2, people.Length);
            }
        }
コード例 #6
0
        public void OneToManyWhereAllIsNew()
        {
            using (var db = new NumberContext())
            {
                var now = DateTime.Now;

                var numbers = GenerateNumbers(1, 100, now).ToArray();
                var request = new BulkInsertRequest <Number>
                {
                    Entities = numbers,
                    EnableRecursiveInsert = EnableRecursiveInsert.Yes,
                };
                db.BulkInsertAll(request);

                Assert.AreEqual(100, db.Numbers.Count());

                var dbNumbers = db.Numbers.Include(n => n.Parity).ToArray();
                foreach (var number in dbNumbers.Where(n => n.Value % 2 == 0))
                {
                    Assert.AreEqual("Even", number.Parity.Name);
                    Assert.AreEqual(now.ToString("yyyyMMddHHmmss"), number.UpdatedAt.ToString("yyyyMMddHHmmss"));
                }

                foreach (var number in dbNumbers.Where(n => n.Value % 2 != 0))
                {
                    Assert.AreEqual("Odd", number.Parity.Name);
                    Assert.AreEqual(now.ToString("yyyyMMddHHmmss"), number.UpdatedAt.ToString("yyyyMMddHHmmss"));
                }
            }
        }
コード例 #7
0
 public void JoinTablesWithGuidKeysShouldBeProperlyInserted()
 {
     using (var db = new BlogContext())
     {
         var blog = new Blog {
             Name = "My Blog"
         };
         var firstPost = new Post
         {
             Blog = blog,
             Text = "My first blogpost.",
         };
         var visitor = new Visitor
         {
             Name = "Visitor1"
         };
         firstPost.Visitors.Add(visitor);
         var req = new BulkInsertRequest <Post>
         {
             Entities = new[] { firstPost }.ToList(),
             AllowNotNullSelfReferences = AllowNotNullSelfReferences.No,
             SortUsingClusteredIndex    = true,
             EnableRecursiveInsert      = EnableRecursiveInsert.Yes
         };
         var response = db.BulkInsertAll(req);
         var posts    = db.Posts
                        .Include(p => p.Blog)
                        .ToArray();
         Assert.AreEqual(1, posts.Count());
     }
 }
コード例 #8
0
        public void CoursesWithSingleInstructorShouldBeBulkInserted()
        {
            using (var db = new SchoolContext())
            {
                var instructors = GetInstructors().ToArray();
                var courses     = GetCourses().ToArray();
                courses[0].Instructors.Add(instructors[0]);
                courses[1].Instructors.Add(instructors[0]);
                courses[2].Instructors.Add(instructors[0]);
                courses[3].Instructors.Add(instructors[1]);
                courses[4].Instructors.Add(instructors[1]);
                var request = new BulkInsertRequest <Course>
                {
                    Entities  = courses.ToList(),
                    Recursive = true,
                    AllowNotNullSelfReferences = false
                };
                db.BulkInsertAll(request);

                var dbInstructors = db.Instructors
                                    .Include(i => i.Courses)
                                    .ToArray();
                var dbCourses = db.Courses.ToArray();
                Assert.AreEqual(2, dbInstructors.Length);
                Assert.AreEqual(5, dbInstructors.SelectMany(i => i.Courses).Count());
                Assert.AreEqual(3, dbInstructors[0].Courses.Count);
                Assert.AreEqual(2, dbInstructors[1].Courses.Count);
                Assert.AreSame(dbCourses[0].Instructors.Single(), dbCourses[1].Instructors.Single());
                Assert.AreSame(dbCourses[0].Instructors.Single(), dbCourses[2].Instructors.Single());
                Assert.AreSame(dbCourses[3].Instructors.Single(), dbCourses[4].Instructors.Single());
            }
        }
コード例 #9
0
        public void InstructorsWithMulitpleCoursesShouldBeBulkInserted()
        {
            using (var db = new SchoolContext())
            {
                var instructors = GetInstructors().ToArray();
                var courses     = GetCourses().ToArray();
                instructors[0].Courses.Add(courses[0]);
                instructors[0].Courses.Add(courses[1]);
                instructors[0].Courses.Add(courses[2]);
                instructors[1].Courses.Add(courses[3]);
                instructors[1].Courses.Add(courses[4]);

                var request = new BulkInsertRequest <Instructor>
                {
                    Entities = instructors.ToList(),
                    EnableRecursiveInsert      = EnableRecursiveInsert.Yes,
                    AllowNotNullSelfReferences = AllowNotNullSelfReferences.No
                };
                db.BulkInsertAll(request);
                var dbInstructors = db.Instructors
                                    .Include(i => i.Courses)
                                    .ToArray();
                var dbCourses = db.Courses.ToArray();
                Assert.AreEqual(2, dbInstructors.Length);
                Assert.AreEqual(5, dbInstructors.SelectMany(i => i.Courses).Count());
                Assert.AreEqual(3, dbInstructors[0].Courses.Count);
                Assert.AreEqual(2, dbInstructors[1].Courses.Count);
                Assert.AreSame(dbCourses[0].Instructors.Single(), dbCourses[1].Instructors.Single());
                Assert.AreSame(dbCourses[0].Instructors.Single(), dbCourses[2].Instructors.Single());
                Assert.AreSame(dbCourses[3].Instructors.Single(), dbCourses[4].Instructors.Single());
            }
        }
コード例 #10
0
        public void EntityHierarchyShouldBeInserted()
        {
            using (var db = new NumberContext())
            {
                var now = DateTime.Now;

                var numbers = GenerateNumbers(1, 10, now).ToArray();  // 1-10
                var primes  = GeneratePrimeNumbers(10, numbers, now); // 1,2,3,5,7

                var request = new BulkInsertRequest <Prime>
                {
                    Entities  = primes,
                    Recursive = true,
                };
                db.BulkInsertAll(request);

                var actualNumbers = db.Numbers.ToArray();
                var actualPrimes  = db.Primes.ToArray();

                Assert.AreEqual(5, actualNumbers.Length);
                Assert.AreEqual(5, actualPrimes.Length);
                Assert.AreEqual(1, actualPrimes[0].Number.Value);
                Assert.AreEqual(2, actualPrimes[1].Number.Value);
                Assert.AreEqual(3, actualPrimes[2].Number.Value);
                Assert.AreEqual(5, actualPrimes[3].Number.Value);
                Assert.AreEqual(7, actualPrimes[4].Number.Value);
            }
        }
コード例 #11
0
        private questStatus getNumEntities(BulkInsertRequest bulkInsertRequest, out int numEntities)
        {
            // Initialize
            numEntities = 0;


            // If one table, return 1.
            if (bulkInsertRequest.Filter.FilterTableList.Count == 1)
            {
                numEntities = 1;
                return(new questStatus(Severity.Success));
            }

            // Figure out number of entities.
            List <string> entityNameList = new List <string>();

            foreach (BulkInsertColumnValue bulkInsertColumnValue in bulkInsertRequest.Rows[0].Columns)
            {
                string[] pp         = bulkInsertColumnValue.Name.Split('_');
                string   entityName = pp[0];

                string existingEntityName = entityNameList.Find(delegate(string t) { return(t == entityName); });
                if (existingEntityName == null)
                {
                    entityNameList.Add(entityName);
                }
            }
            numEntities = entityNameList.Count();

            return(new questStatus(Severity.Success));
        }
コード例 #12
0
        public void EntityHierarchyShouldBeInserted()
        {
            using (var db = new NumberContext())
            {
                var now = DateTime.Now;

                var parities = new[]
                {
                    new Parity {
                        Name = "Even", UpdatedAt = now, UpdatedBy = "Måns"
                    },
                    new Parity {
                        Name = "Odd", UpdatedAt = now, UpdatedBy = "Måns"
                    },
                };

                var numbers = GenerateNumbers(1, 100, parities[0], parities[1], now).ToArray();
                var primes  = GeneratePrimeNumbers(100, numbers, now);

                var request = new BulkInsertRequest <Prime>
                {
                    Entities  = primes,
                    Recursive = true,
                };
                db.BulkInsertAll(request);
            }
        }
コード例 #13
0
        public void StackOverflowTest()
        {
            using (var db = new SchoolContext())
            {
                var i1 = new Instructor
                {
                    FirstName        = "Mickey",
                    LastName         = "Mouse",
                    HireDate         = new DateTime(1928, 5, 15),
                    OfficeAssignment = new OfficeAssignment {
                        Location = "Room 1A"
                    }
                };
                db.Instructors.Add(i1);
                db.SaveChanges();

                var d1 = new Department
                {
                    Name   = "Computer Science",
                    Budget = 10000000,
                };

                var c1 = new Course
                {
                    Credits    = 4,
                    Title      = "Foundations of Data Science",
                    Department = d1
                };

                db.Courses.Add(c1);
                db.SaveChanges();

                i1.Courses.Add(c1);
                db.SaveChanges();

                Assert.AreEqual(1, db.Instructors.SelectMany(i => i.Courses).Distinct().Count());

                var instructor = db.Instructors
                                 .Include(i => i.Courses.Select(c => c.Department))
                                 .Include(i => i.OfficeAssignment)
                                 .Single();

                instructor.InstructorID = 0;
                instructor.OfficeAssignment.InstructorID = 0;

                var request = new BulkInsertRequest <Instructor>
                {
                    Entities = new[] { instructor }.ToList(),
                    EnableRecursiveInsert      = EnableRecursiveInsert.Yes,
                    AllowNotNullSelfReferences = AllowNotNullSelfReferences.No
                };
                db.BulkInsertAll(request);


                Assert.AreEqual(2, db.Instructors.SelectMany(i => i.Courses).Count());
            }
        }
コード例 #14
0
        public questStatus PerformBulkInsert(BulkInsertRequest bulkInsertRequest)
        {
            // Initialize
            questStatus status = null;


            // Execute bulk insert SQL
            try
            {
                // Get tableset
                TablesetId     tablesetId     = new TablesetId(bulkInsertRequest.Filter.TablesetId);
                Tableset       tableset       = null;
                DbTablesetsMgr dbTablesetsMgr = new DbTablesetsMgr(this.UserSession);
                status = dbTablesetsMgr.Read(tablesetId, out tableset);
                if (!questStatusDef.IsSuccessOrWarning(status))
                {
                    return(status);
                }

                // Get database
                DatabaseId databaseId = new DatabaseId(tableset.DatabaseId);
                Quest.Functional.MasterPricing.Database database = null;
                DbDatabasesMgr dbDatabasesMgr = new DbDatabasesMgr(this.UserSession);
                status = dbDatabasesMgr.Read(databaseId, out database);
                if (!questStatusDef.IsSuccessOrWarning(status))
                {
                    return(status);
                }

                // Execute sql
                using (SqlConnection sqlConnection = new SqlConnection(database.ConnectionString))
                {
                    sqlConnection.Open();

                    using (SqlCommand cmd = sqlConnection.CreateCommand())
                    {
                        cmd.CommandText = bulkInsertRequest.SQL;
                        cmd.CommandType = CommandType.Text;

                        int numRows = cmd.ExecuteNonQuery();
                        if (numRows != bulkInsertRequest.Rows.Count)
                        {
                            return(new questStatus(Severity.Error, String.Format("ERROR: Bulk insert SQL execution failed: Rows: {0}", numRows)));
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                return(new questStatus(Severity.Fatal, String.Format("EXCEPTION: executing bulk insert SQL {0} SQL: {1}",
                                                                     bulkInsertRequest.SQL, ex.Message)));
            }
            return(new questStatus(Severity.Success));
        }
コード例 #15
0
        public void AddingEmployeeToSubsidiary()
        {
            var corporateGroup = new Company
            {
                Name = "Global Corporation Inc",
            };

            corporateGroup.ParentCompany = corporateGroup;
            var employer = new Company
            {
                Name = "Subsidiary Corporation Inc",
            };

            employer.ParentCompany = corporateGroup;

            var john = new Employee
            {
                Name     = "John",
                Employer = employer
            };
            var adam = new Employee
            {
                Name     = "Adam",
                Employer = employer
            };

            using (var db = new UnitTestContext())
            {
                var request = new BulkInsertRequest <Employee>
                {
                    Entities = new List <Employee> {
                        john, adam
                    },
                    EnableRecursiveInsert      = EnableRecursiveInsert.Yes,
                    AllowNotNullSelfReferences = AllowNotNullSelfReferences.Yes
                };
                db.BulkInsertAll(request);

                var actual = db.Employees
                             .Include(e => e.Employer.ParentCompany)
                             .OrderBy(e => e.Name).ToArray();
                Assert.AreEqual("Adam", actual[0].Name);
                Assert.AreEqual("Subsidiary Corporation Inc", actual[0].Employer.Name);
                Assert.AreSame(actual[0].Employer, actual[1].Employer);

                Assert.AreEqual("John", actual[1].Name);
                Assert.AreEqual("Subsidiary Corporation Inc", actual[1].Employer.Name);

                Assert.AreEqual("Global Corporation Inc", actual[0].Employer.ParentCompany.Name);
                Assert.AreEqual("Global Corporation Inc", actual[1].Employer.ParentCompany.Name);
                Assert.AreSame(actual[0].Employer.ParentCompany, actual[1].Employer.ParentCompany);
            }
        }
コード例 #16
0
        public void ModifiedEntityShouldBeUpdated()
        {
            using (var db = new UnitTestContext())
            {
                var blog = new Blog {
                    Name = "My Blog"
                };
                var firstPost = new Post
                {
                    Text         = "My first blogpost.",
                    PostKeywords = new List <Keyword>()
                    {
                        new Keyword {
                            Text = "first"
                        }
                    }
                };
                var secondPost = new Post
                {
                    Text         = "My second blogpost.",
                    PostKeywords = new List <Keyword>()
                    {
                        new Keyword {
                            Text = "second"
                        }
                    }
                };
                blog.BlogPosts.Add(firstPost);
                blog.BlogPosts.Add(secondPost);
                var req = new BulkInsertRequest <Blog>
                {
                    Entities = new[] { blog }.ToList(),
                    AllowNotNullSelfReferences = AllowNotNullSelfReferences.No,
                    SortUsingClusteredIndex    = true,
                    EnableRecursiveInsert      = EnableRecursiveInsert.Yes
                };
                var response = db.BulkInsertAll(req);

                var b = db.Blogs.Single();
                Assert.AreEqual("My Blog", b.Name);

                b.Name = "My (modified) Blog";
                db.BulkUpdateAll(new BulkUpdateRequest
                {
                    Entities         = new [] { b },
                    KeyPropertyNames = new [] { "Id" }
                });

                b = db.Blogs.Single();
                Assert.AreEqual("My (modified) Blog", b.Name);
            }
        }
コード例 #17
0
        public string GetJsonBulkInsert <T>(BulkInsertRequest <T> request)
        {
            JsonSerializerSettings serializerSettings = new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
            };

            //serializerSettings.Converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-ddTHH:mm:ssZ" });


            foreach (T record in request.Records)
            {
                T recordToInsert = (T)record;


                //recordToInsert.CreatedById = null;
                //recordToInsert.CreatedDate = null;
                //recordToInsert.LastModifiedById = null;
                //recordToInsert.LastModifiedDate = null;
                //recordToInsert.LastViewedDate = null;
                //recordToInsert.SystemModstamp = null;
                //recordToInsert.LastReferencedDate = null;
            }


            string requestJson = JsonConvert.SerializeObject(request, Formatting.Indented, serializerSettings);


            // Create JSON Line https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/requests_composite_sobject_tree.htm#topic-title
            JObject obj      = JObject.Parse(requestJson);
            JArray  reccords = (JArray)obj["records"];

            foreach (var reccord in reccords)
            {
                var recordObject = (JObject)reccord;
                Console.WriteLine(recordObject["ID"]);

                Attributes attribute =
                    new Attributes
                {
                    type        = typeof(T).Name,
                    referenceId = recordObject["ID"].ToString(),
                };
                var attributeObject = JObject.FromObject(attribute);
                recordObject.Add(new JProperty("attributes", attributeObject));

                recordObject.Remove("ID");
            }


            return(obj.ToString(Formatting.Indented));
        }
コード例 #18
0
        public questStatus PerformBulkInsertFilterProcedure(BulkInsertRequest bulkInsertRequest, FilterProcedure filterProcedure)
        {
            // Initialize
            questStatus status = null;


            // Perform operation.
            status = _dbBulkInsertMgr.PerformBulkInsertFilterProcedure(bulkInsertRequest, filterProcedure);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }
            return(new questStatus(Severity.Success));
        }
コード例 #19
0
        public void InsertBatchInvoiceWithInvoiceForEachExistingJournal()
        {
            using (var db = new InvoiceContext())
            {
                for (int i = 0; i < 10; i++)
                {
                    db.Journals.Add(new Journal()
                    {
                        Id = Guid.NewGuid()
                    });
                }
                db.SaveChanges();

                var batchInvoice = new BatchInvoice {
                    Id = Guid.NewGuid()
                };

                foreach (var journal in db.Journals.ToList())
                {
                    var invoice = new Invoice()
                    {
                        Id = Guid.NewGuid()
                    };
                    invoice.Journals.Add(new InvoiceItem()
                    {
                        JournalId = journal.Id
                    });
                    batchInvoice.Invoices.Add(new BatchInvoiceItem()
                    {
                        Id = Guid.NewGuid(), Invoice = invoice
                    });
                }

                var req = new BulkInsertRequest <BatchInvoice>
                {
                    Entities = new[] { batchInvoice }.ToList(),
                    AllowNotNullSelfReferences = AllowNotNullSelfReferences.No,
                    SortUsingClusteredIndex    = true,
                    EnableRecursiveInsert      = EnableRecursiveInsert.Yes
                };
                var response = db.BulkInsertAll(req);

                Assert.AreEqual(1, db.BatchInvoices.ToArray().Count());
                Assert.AreEqual(10, db.BatchInvoiceItems.ToArray().Count());
                Assert.AreEqual(10, db.Invoices.ToArray().Count());
                Assert.AreEqual(10, db.InvoiceItems.ToArray().Count());
            }
        }
コード例 #20
0
        public void InsertEntityWithComputedColumnInTableWithUserGeneratedPrimaryKeyShouldWork()
        {
            using (var db = new UnitTestContext())
            {
                for (int i = 0; i < 10; i++)
                {
                    db.Journals.Add(new Journal()
                    {
                        Id = Guid.NewGuid()
                    });
                }
                db.SaveChanges();

                var batchInvoice = new BatchInvoice {
                    Id = Guid.NewGuid()
                };

                foreach (var journal in db.Journals.ToList())
                {
                    var invoice = new Invoice()
                    {
                        Id = Guid.NewGuid(), Gross = 10, Net = 3
                    };
                    invoice.Journals.Add(new InvoiceItem()
                    {
                        JournalId = journal.Id
                    });
                    batchInvoice.Invoices.Add(new BatchInvoiceItem()
                    {
                        Id = Guid.NewGuid(), Invoice = invoice
                    });
                }

                var req = new BulkInsertRequest <BatchInvoice>
                {
                    Entities = new[] { batchInvoice }.ToList(),
                    AllowNotNullSelfReferences = AllowNotNullSelfReferences.No,
                    SortUsingClusteredIndex    = true,
                    EnableRecursiveInsert      = EnableRecursiveInsert.Yes
                };
                var response = db.BulkInsertAll(req);

                Assert.AreEqual(1, db.BatchInvoices.ToArray().Count());
                Assert.AreEqual(10, db.BatchInvoiceItems.ToArray().Count());
                Assert.AreEqual(10, db.Invoices.ToArray().Count());
                Assert.AreEqual(10, db.InvoiceItems.ToArray().Count());
            }
        }
コード例 #21
0
        public async Task <BulkInsertReply> CreateRecordBulk <T>(BulkInsertRequest <T> bulkInsertrequest)
        {
            var objectName             = GetSalesForceObjectName <T>();
            HttpRequestMessage request = new HttpRequestMessage
            {
                RequestUri = new Uri(_connectionDetail.RestUrl + "/data/v37.0/composite/tree/" + objectName),
                Method     = HttpMethod.Post,
            };

            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            request.Headers.Add("Authorization", _connectionDetail.RestSessionId);

            string requestJson = GetJsonBulkInsert <T>(bulkInsertrequest);

            Console.WriteLine(requestJson);

            request.Content = new StringContent(requestJson, Encoding.UTF8, "application/json");

            HttpClient          httpClient      = new HttpClient();
            HttpResponseMessage responseMessage = await httpClient.SendAsync(request);


            //   Console.WriteLine(responseMessage.StatusCode);
            switch (responseMessage.StatusCode)
            {
            case HttpStatusCode.Created:
                string jsonData = responseMessage.Content.ReadAsStringAsync().Result;
                //         Console.WriteLine(jsonData);
                BulkInsertReply bulkInsertReply = JsonConvert.DeserializeObject <BulkInsertReply>(jsonData);
                return(bulkInsertReply);

            case HttpStatusCode.BadRequest:
                Console.WriteLine(responseMessage.Content.ReadAsStringAsync().Result);
                break;

            case HttpStatusCode.Unauthorized:
                Console.WriteLine(responseMessage.Content.ReadAsStringAsync().Result);
                break;

            default:
                Console.WriteLine(responseMessage.Content.ReadAsStringAsync().Result);
                break;
            }
            return(null);
        }
コード例 #22
0
        /*==================================================================================================================================
        * Public Methods
        *=================================================================================================================================*/

        #region Filter Procedure Utility Routines

        /*----------------------------------------------------------------------------------------------------------------------------------
        * Filter Procedure Utility Routines
        *---------------------------------------------------------------------------------------------------------------------------------*/
        public questStatus GetFilterProcedure(BulkInsertRequest bulkInsertRequest, string Action, out FilterProcedure filterProcedure)
        {
            // Initialize
            questStatus status = null;

            filterProcedure = null;


            // Get the filter procedures.
            FilterId filterId = new FilterId(bulkInsertRequest.FilterId);
            List <FilterProcedure> filterProcedureList   = null;
            DbFilterProceduresMgr  dbFilterProceduresMgr = new DbFilterProceduresMgr(this.UserSession);

            status = dbFilterProceduresMgr.Read(filterId, out filterProcedureList);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }

            // Determine if given action exists.
            FilterProcedure INSERTsproc = filterProcedureList.Find(delegate(FilterProcedure fp) { return(fp.Action == Action); });

            if (INSERTsproc == null)
            {
                return(new questStatus(Severity.Warning, String.Format("No {0} filter procedure", Action)));
            }

            // Get parameters
            FilterProcedureId filterProcedureId = new FilterProcedureId(INSERTsproc.Id);
            List <FilterProcedureParameter> filterProcedureParameterList   = null;
            DbFilterProcedureParametersMgr  dbFilterProcedureParametersMgr = new DbFilterProcedureParametersMgr(this.UserSession);

            status = dbFilterProcedureParametersMgr.Read(filterProcedureId, out filterProcedureParameterList);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }

            // Return filter procedure with parameters.
            INSERTsproc.ParameterList = filterProcedureParameterList;
            filterProcedure           = INSERTsproc;

            return(new questStatus(Severity.Success));
        }
コード例 #23
0
        public void CoursesWithSingleInstructorShouldBeBulkInserted()
        {
            using (var db = new UnitTestContext())
            {
                var instructors = GetInstructors().ToArray();
                var courses     = GetCourses().ToArray();
                courses[0].CourseInstructors.Add(new CourseInstructor {
                    Instructor = instructors[0]
                });
                courses[1].CourseInstructors.Add(new CourseInstructor {
                    Instructor = instructors[0]
                });
                courses[2].CourseInstructors.Add(new CourseInstructor {
                    Instructor = instructors[0]
                });
                courses[3].CourseInstructors.Add(new CourseInstructor {
                    Instructor = instructors[1]
                });
                courses[4].CourseInstructors.Add(new CourseInstructor {
                    Instructor = instructors[1]
                });

                var request = new BulkInsertRequest <Course>
                {
                    Entities = courses.ToList(),
                    EnableRecursiveInsert      = EnableRecursiveInsert.Yes,
                    AllowNotNullSelfReferences = AllowNotNullSelfReferences.No
                };
                db.BulkInsertAll(request);

                var dbInstructors = db.Instructors
                                    .Include(i => i.CourseInstructors)
                                    .ThenInclude(ci => ci.Course)
                                    .ToArray();
                var dbCourses = db.Courses.ToArray();
                Assert.AreEqual(2, dbInstructors.Length);
                Assert.AreEqual(5, dbInstructors.SelectMany(i => i.Courses).Count());
                Assert.AreEqual(3, dbInstructors[0].Courses.Count);
                Assert.AreEqual(2, dbInstructors[1].Courses.Count);
                Assert.AreSame(dbCourses[0].Instructors.Single(), dbCourses[1].Instructors.Single());
                Assert.AreSame(dbCourses[0].Instructors.Single(), dbCourses[2].Instructors.Single());
                Assert.AreSame(dbCourses[3].Instructors.Single(), dbCourses[4].Instructors.Single());
            }
        }
コード例 #24
0
 public void OneToManyWithGuidPrimaryKeyInsertingTheTopEntity()
 {
     using (var db = new BlogContext())
     {
         var blog = new Blog {
             Name = "My Blog"
         };
         var firstPost = new Post
         {
             Text         = "My first blogpost.",
             PostKeywords = new List <Keyword>()
             {
                 new Keyword {
                     Text = "first"
                 }
             }
         };
         var secondPost = new Post
         {
             Text         = "My second blogpost.",
             PostKeywords = new List <Keyword>()
             {
                 new Keyword {
                     Text = "second"
                 }
             }
         };
         blog.BlogPosts.Add(firstPost);
         blog.BlogPosts.Add(secondPost);
         var req = new BulkInsertRequest <Blog>
         {
             Entities = new[] { blog }.ToList(),
             AllowNotNullSelfReferences = AllowNotNullSelfReferences.No,
             SortUsingClusteredIndex    = true,
             EnableRecursiveInsert      = EnableRecursiveInsert.Yes
         };
         var response = db.BulkInsertAll(req);
         var posts    = db.Posts
                        .Include(p => p.Blog)
                        .ToArray();
         Assert.AreEqual(2, posts.Count());
         Assert.AreEqual(posts[1].Blog, posts[0].Blog);
     }
 }
コード例 #25
0
 public void OneToManyWithGuidPrimaryKeyInsertingTheChildEntities()
 {
     using (var db = new BlogContext())
     {
         var blog = new Blog {
             Name = "My Blog"
         };
         var firstPost = new Post
         {
             Blog         = blog,
             Text         = "My first blogpost.",
             PostKeywords = new List <Keyword>()
             {
                 new Keyword {
                     Text = "first"
                 }
             }
         };
         var secondPost = new Post
         {
             Blog         = blog,
             Text         = "My second blogpost.",
             PostKeywords = new List <Keyword>()
             {
                 new Keyword {
                     Text = "second"
                 }
             }
         };
         var req = new BulkInsertRequest <Post>
         {
             Entities = new[] { firstPost, secondPost }.ToList(),
             AllowNotNullSelfReferences = false,
             SortUsingClusteredIndex    = true,
             Recursive = true
         };
         var response = db.BulkInsertAll(req);
         var posts    = db.Posts
                        .Include(p => p.Blog)
                        .ToArray();
         Assert.AreEqual(2, posts.Count());
         Assert.AreEqual(posts[1].Blog, posts[0].Blog);
     }
 }
コード例 #26
0
        /*==================================================================================================================================
        * Public Methods
        *=================================================================================================================================*/
        public questStatus DoBulkInsert(BulkInsertViewModel bulkInsertViewModel)
        {
            // Initialize
            questStatus status = null;


            // Build bulk insert request
            BulkInsertRequest bulkInsertRequest = new BulkInsertRequest();

            BufferMgr.TransferBuffer(bulkInsertViewModel, bulkInsertRequest, true);
            bulkInsertRequest.TablesetId = bulkInsertViewModel.TablesetId;

            foreach (BulkInsertRowDataViewModel RowData in bulkInsertViewModel.Rows)
            {
                BulkInsertRow bulkInsertRow = new BulkInsertRow();
                foreach (NameValueViewModel nameValueViewModel in RowData.Columns)
                {
                    BulkInsertColumnValue bulkInsertColumnValue = new BulkInsertColumnValue();
                    bulkInsertColumnValue.Name = nameValueViewModel.ColumnName;
                    if ((string.IsNullOrWhiteSpace(nameValueViewModel.ColumnValue)) && (nameValueViewModel.ColumnValue != null))
                    {
                        bulkInsertColumnValue.Value = nameValueViewModel.ColumnValue.Trim();
                    }
                    else
                    {
                        bulkInsertColumnValue.Value = nameValueViewModel.ColumnValue;
                    }
                    bulkInsertRow.Columns.Add(bulkInsertColumnValue);
                }
                bulkInsertRequest.Rows.Add(bulkInsertRow);
            }

            // Perform bulk insert.
            BulkInsertMgr bulkInsertMgr = new BulkInsertMgr(this.UserSession);

            status = bulkInsertMgr.PerformBulkInsert(bulkInsertRequest);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }
            return(new questStatus(Severity.Success));
        }
コード例 #27
0
 public void AddingEmployeeToCompanyWithoutParentCompanySet()
 {
     try
     {
         var employer = new Company
         {
             Name = "World Inc",
         };
         var john = new Employee
         {
             Name     = "John",
             Employer = employer
         };
         var adam = new Employee
         {
             Name     = "Adam",
             Employer = employer
         };
         using (var db = new UnitTestsContext())
         {
             var request = new BulkInsertRequest <Employee>
             {
                 Entities = new List <Employee> {
                     john, adam
                 },
                 EnableRecursiveInsert      = EnableRecursiveInsert.Yes,
                 AllowNotNullSelfReferences = AllowNotNullSelfReferences.Yes
             };
             db.BulkInsertAll(request);
         }
     }
     catch (System.Data.SqlClient.SqlException e)
     {
         Console.WriteLine(e.Message);
         var expectedMessage =
             @"The ALTER TABLE statement conflicted with the FOREIGN KEY SAME TABLE constraint ""FK_dbo_Company_dbo_Company_ParentCompanyId"". The conflict occurred in database ""Tanneryd.BulkOperations.EF6.NET47.ModelFirst.Tests.Models.EF.UnitTestContext"", table ""dbo.Company"", column 'Id'.";
         Assert.AreEqual(expectedMessage, e.Message);
         throw;
     }
 }
コード例 #28
0
        public void AddingEmployeeToSubsidiary()
        {
            var employer = new Company
            {
                Name = "World Inc",
            };

            employer.ParentCompany = employer;
            var john = new Employee
            {
                Name     = "John",
                Employer = employer
            };
            var adam = new Employee
            {
                Name     = "Adam",
                Employer = employer
            };

            using (var db = new CompanyContext())
            {
                var request = new BulkInsertRequest <Employee>
                {
                    Entities = new List <Employee> {
                        john, adam
                    },
                    Recursive = true,
                    AllowNotNullSelfReferences = true
                };
                db.BulkInsertAll(request);

                var actual = db.Employees.Include(e => e.Employer).OrderBy(e => e.Name).ToArray();
                Assert.AreEqual("Adam", actual[0].Name);
                Assert.AreEqual("World Inc", actual[0].Employer.Name);
                Assert.AreSame(actual[0].Employer, actual[0].Employer.ParentCompany);
                Assert.AreEqual("John", actual[1].Name);
                Assert.AreEqual("World Inc", actual[1].Employer.Name);
                Assert.AreSame(actual[1].Employer, actual[1].Employer.ParentCompany);
            }
        }
コード例 #29
0
 public void OneToManyWithGuidPrimaryKey()
 {
     using (var db = new BlogContext())
     {
         var blog = new Blog {
             Name = "My Blog"
         };
         var firstPost = new Post
         {
             Blog         = blog,
             Text         = "My first blogpost.",
             PostKeywords = new List <Keyword>()
             {
                 new Keyword {
                     Text = "first"
                 }
             }
         };
         var secondPost = new Post
         {
             Blog         = blog,
             Text         = "My second blogpost.",
             PostKeywords = new List <Keyword>()
             {
                 new Keyword {
                     Text = "second"
                 }
             }
         };
         var req = new BulkInsertRequest <Blog>
         {
             Entities = new[] { blog }.ToList(),
             AllowNotNullSelfReferences = false,
             SortUsingClusteredIndex    = true,
             Recursive = true
         };
         var response = db.BulkInsertAll(req);
     }
 }
コード例 #30
0
        public void BulkInsertIntoTableWithoutNavPropertiesShouldWork()
        {
            using (var db = new UnitTestContext())
            {
                var entities = new List <Price>
                {
                    new Price()
                    {
                        Date = new DateTime(2019, 1, 1), Name = "ERICB", Value = 80
                    },
                    new Price()
                    {
                        Date = new DateTime(2019, 1, 2), Name = "ERICB", Value = 81
                    },
                    new Price()
                    {
                        Date = new DateTime(2019, 1, 3), Name = "ERICB", Value = 82
                    },
                    new Price()
                    {
                        Date = new DateTime(2019, 1, 4), Name = "ERICB", Value = 0
                    },
                    new Price()
                    {
                        Date = new DateTime(2019, 1, 5), Name = "ERICB", Value = 86
                    }
                };


                var request = new BulkInsertRequest <Price>
                {
                    AllowNotNullSelfReferences = AllowNotNullSelfReferences.No,
                    EnableRecursiveInsert      = EnableRecursiveInsert.NoButRetrieveGeneratedPrimaryKeys,
                    Entities = entities.ToArray()
                };

                db.BulkInsertAll(request);
            }
        }