public virtual void Collections_are_loaded_correctly_for_query_fetching_only_a_single_entity_where_entity_is_joined_to_itself_with_multiple_collections_using_only_parent_to_child_relation() { var company1 = new Company { Name = "Company 1" }; Repository.Insert(company1); var employee1 = new Employee("firstname1", "lastname1"); var employee2 = new Employee("firstname2", "lastname2"); var employee3 = new Employee("firstname3", "lastname3"); var employee4 = new Employee("firstname4", "lastname4"); var employee5 = new Employee("firstname5", "lastname5"); var employee6 = new Employee("firstname6", "lastname6"); company1.AddEmployee(employee1); company1.AddEmployee(employee2); company1.AddEmployee(employee3); company1.AddEmployee(employee4); company1.AddEmployee(employee5); company1.AddEmployee(employee6); Repository.Insert(employee1); // Insert employee1 first since all the others reference that one employee1.AddMentee(employee2); employee1.AddMentee(employee3); employee1.AddSubordinate(employee4); employee1.AddSubordinate(employee5); Repository.Insert(employee2, employee3, employee4, employee5, employee6); var actualEmployee1 = Repository.Find<Employee>(primaryAlias: "manager") .Where<Employee>("manager", x => x.Id == employee1.Id) .OrWhere<Employee>("mentor", x => x.Id == employee1.Id) .Join(x => x.Subordinates, x => x.ManagerId, "manager", null) .Join(x => x.Mentees, x => x.MentorId, "mentor", null) .OrderBy(x => x.LastName) .OrderBy<Employee>("manager", x => x.LastName) .OrderBy<Employee>("mentor", x => x.LastName) .Execute(); Assert.AreEqual(2, actualEmployee1.Mentees.Count); Assert.AreEqual("lastname2", actualEmployee1.Mentees[0].LastName); Assert.AreEqual("lastname3", actualEmployee1.Mentees[1].LastName); Assert.AreEqual(2, actualEmployee1.Subordinates.Count); Assert.AreEqual("lastname4", actualEmployee1.Subordinates[0].LastName); Assert.AreEqual("lastname5", actualEmployee1.Subordinates[1].LastName); }
public void Condition_can_be_placed_on_table_without_alias_when_joining_with_aliased_table() { var company = new Company { Name = "Company 1" }; var employee1 = new Employee { LastName = "Employee 1" }; var employee2 = new Employee { LastName = "Employee 2" }; var employee3 = new Employee { LastName = "Employee 3" }; var manager1 = new Employee { LastName = "Manager" }; var manager2 = new Employee { LastName = "Manager 2" }; Repository.Insert(company); company.AddEmployee(employee1); company.AddEmployee(employee2); company.AddEmployee(employee3); company.AddEmployee(manager1); company.AddEmployee(manager2); Repository.Insert(manager1, manager2); // Add the subordinates after the managers have been saved so that the // ManagerIds are set to the correct values manager1.AddSubordinate(employee1); manager1.AddSubordinate(employee2); manager2.AddSubordinate(employee3); Repository.Insert(employee1, employee2, employee3); var actualEmployees = Repository.Find<Employee>() .Where(x => x.ManagerId == manager1.Id) .Join<Employee, Employee>(x => x.Subordinates, x => x.Manager, parentAlias: "Manager", childAlias: null) .OrderBy(x => x.LastName) .ExecuteList(); Assert.AreEqual(2, actualEmployees.Count); AssertEqualsManagerAndSubordinates(employee1, actualEmployees[0]); AssertEqualsManagerAndSubordinates(employee2, actualEmployees[1]); }
public void Entity_can_be_joined_to_itself_without_constraints() { var company = new Company { Name = "Company 1" }; var employee1 = new Employee { LastName = "Employee 1" }; var employee2 = new Employee { LastName = "Employee 2" }; var employee3 = new Employee { LastName = "Employee 3" }; var manager1 = new Employee { LastName = "Manager" }; var manager2 = new Employee { LastName = "Manager 2" }; Repository.Insert(company); company.AddEmployee(employee1); company.AddEmployee(employee2); company.AddEmployee(employee3); company.AddEmployee(manager1); company.AddEmployee(manager2); Repository.Insert(manager1, manager2); // Add the subordinates after the managers have been saved so that the // ManagerIds are set to the correct values manager1.AddSubordinate(employee1); manager1.AddSubordinate(employee2); manager2.AddSubordinate(employee3); Repository.Insert(employee1, employee2, employee3); var actualEmployees = Repository.Find<Employee>() .Join<Employee, Employee>(x => x.Subordinates, x => x.Manager, parentAlias: "Manager", childAlias: null) .OrderBy(x => x.LastName) .ExecuteList(); Assert.AreEqual(5, actualEmployees.Count); AssertEqualsManagerAndSubordinates(employee1, actualEmployees[0]); AssertEqualsManagerAndSubordinates(employee2, actualEmployees[1]); AssertEqualsManagerAndSubordinates(employee3, actualEmployees[2]); AssertEqualsManagerAndSubordinates(manager1, actualEmployees[3]); AssertEqualsManagerAndSubordinates(manager2, actualEmployees[4]); }