public static void RefreshForeignKeyTest(string connectionName) { OrderItemCollection oiColl = new OrderItemCollection(); oiColl.es.Connection.Name = "ForeignKeyTest"; if (connectionName.Length != 0) { oiColl.es.Connection.Name = connectionName; } oiColl.Query.Where(oiColl.Query.OrderID > 11 | oiColl.Query.ProductID > 9); oiColl.Query.Load(); oiColl.MarkAllAsDeleted(); oiColl.Save(); OrderCollection oColl = new OrderCollection(); oColl.es.Connection.Name = "ForeignKeyTest"; if (connectionName.Length != 0) { oColl.es.Connection.Name = connectionName; } oColl.Query.Where(oColl.Query.OrderID > 11); oColl.Query.Load(); oColl.MarkAllAsDeleted(); oColl.Save(); EmployeeTerritoryCollection etColl = new EmployeeTerritoryCollection(); etColl.es.Connection.Name = "ForeignKeyTest"; if (connectionName.Length != 0) { etColl.es.Connection.Name = connectionName; } etColl.Query.Where(etColl.Query.EmpID > 4 | etColl.Query.TerrID > 4); etColl.Query.Load(); etColl.MarkAllAsDeleted(); etColl.Save(); CustomerCollection cColl = new CustomerCollection(); cColl.es.Connection.Name = "ForeignKeyTest"; if (connectionName.Length != 0) { cColl.es.Connection.Name = connectionName; } cColl.Query.Where(cColl.Query.CustomerID > "99999" & cColl.Query.CustomerSub > "001"); cColl.Query.Load(); cColl.MarkAllAsDeleted(); cColl.Save(); TerritoryExCollection tExColl = new TerritoryExCollection(); tExColl.es.Connection.Name = "ForeignKeyTest"; if (connectionName.Length != 0) { tExColl.es.Connection.Name = connectionName; } tExColl.Query.Where(tExColl.Query.TerritoryID > 1); tExColl.Query.Load(); tExColl.MarkAllAsDeleted(); tExColl.Save(); TerritoryCollection tColl = new TerritoryCollection(); tColl.es.Connection.Name = "ForeignKeyTest"; if (connectionName.Length != 0) { tColl.es.Connection.Name = connectionName; } tColl.Query.Where(tColl.Query.TerritoryID > 5); tColl.Query.Load(); tColl.MarkAllAsDeleted(); tColl.Save(); ReferredEmployeeCollection reColl = new ReferredEmployeeCollection(); reColl.es.Connection.Name = "ForeignKeyTest"; if (connectionName.Length != 0) { reColl.es.Connection.Name = connectionName; } reColl.Query.Where(reColl.Query.EmployeeID > 4 | reColl.Query.ReferredID > 5); reColl.Query.Load(); reColl.MarkAllAsDeleted(); reColl.Save(); ProductCollection pColl = new ProductCollection(); pColl.es.Connection.Name = "ForeignKeyTest"; if (connectionName.Length != 0) { pColl.es.Connection.Name = connectionName; } pColl.Query.Where(pColl.Query.ProductID > 10); pColl.Query.Load(); pColl.MarkAllAsDeleted(); pColl.Save(); GroupCollection gColl = new GroupCollection(); gColl.es.Connection.Name = "ForeignKeyTest"; if (connectionName.Length != 0) { gColl.es.Connection.Name = connectionName; } gColl.Query.Where(gColl.Query.Id > "15001"); gColl.Query.Load(); gColl.MarkAllAsDeleted(); gColl.Save(); EmployeeCollection eColl = new EmployeeCollection(); eColl.es.Connection.Name = "ForeignKeyTest"; if (connectionName.Length != 0) { eColl.es.Connection.Name = connectionName; } eColl.Query.Where(eColl.Query.EmployeeID > 5); eColl.Query.Load(); eColl.MarkAllAsDeleted(); eColl.Save(); CustomerGroupCollection cgColl = new CustomerGroupCollection(); cgColl.es.Connection.Name = "ForeignKeyTest"; if (connectionName.Length != 0) { cgColl.es.Connection.Name = connectionName; } cgColl.Query.Where(cgColl.Query.GroupID > "99999" | cgColl.Query.GroupID < "00001"); cgColl.Query.Load(); cgColl.MarkAllAsDeleted(); cgColl.Save(); }
public void TestSaveSimpleCollection() { int empKey = -1; EmployeeCollection empColl = new EmployeeCollection(); empColl.es.Connection.Name = "ForeignKeyTest"; Employee emp = new Employee(); emp.es.Connection.Name = "ForeignKeyTest"; try { using (esTransactionScope scope = new esTransactionScope()) { empColl.LoadAll(); emp = empColl.AddNew(); emp.LastName = "LastName"; emp.FirstName = "FirstName"; Order ord = emp.OrderCollectionByEmployeeID.AddNew(); ord.CustID = "10001"; ord.CustSub = "001"; ord.str().OrderDate = "2007-01-01 00:00:00"; empColl.Save(); empKey = emp.EmployeeID.Value; Assert.AreEqual(1, emp.OrderCollectionByEmployeeID.Count); Assert.AreEqual(emp.EmployeeID.Value, ord.EmployeeID.Value); } } finally { // Clean up emp = new Employee(); emp.es.Connection.Name = "ForeignKeyTest"; if (emp.LoadByPrimaryKey(empKey)) { OrderCollection ordColl = emp.OrderCollectionByEmployeeID; ordColl.MarkAllAsDeleted(); emp.MarkAsDeleted(); emp.Save(); } } }
public void TestMultiDeleteEntity() { int empKey = -1; int ordKey = -1; CustomerGroup custGroup = new CustomerGroup(); custGroup.es.Connection.Name = "ForeignKeyTest"; EmployeeCollection empColl = new EmployeeCollection(); empColl.es.Connection.Name = "ForeignKeyTest"; Employee emp = new Employee(); emp.es.Connection.Name = "ForeignKeyTest"; Employee testEmp = new Employee(); testEmp.es.Connection.Name = "ForeignKeyTest"; Customer cust = new Customer(); cust.es.Connection.Name = "ForeignKeyTest"; Order ord = new Order(); ord.es.Connection.Name = "ForeignKeyTest"; try { using (esTransactionScope scope = new esTransactionScope()) { // Setup custGroup.GroupID = "YYYYY"; custGroup.GroupName = "Test"; custGroup.Save(); emp = empColl.AddNew(); emp.LastName = "LastName"; emp.FirstName = "FirstName"; cust = emp.CustomerCollectionByStaffAssigned.AddNew(); cust.CustomerID = "YYYYY"; cust.CustomerSub = "YYY"; cust.CustomerName = "Test"; cust.str().DateAdded = "2007-01-01 00:00:00"; cust.Active = true; cust.Manager = 1; ord = emp.OrderCollectionByEmployeeID.AddNew(); ord.CustID = "YYYYY"; ord.CustSub = "YYY"; ord.str().OrderDate = "2007-01-01"; empColl.Save(); empKey = emp.EmployeeID.Value; ordKey = ord.OrderID.Value; Assert.AreEqual(1, emp.CustomerCollectionByStaffAssigned.Count); Assert.AreEqual(1, emp.OrderCollectionByEmployeeID.Count); Assert.AreEqual(emp.EmployeeID.Value, cust.StaffAssigned.Value); Assert.AreEqual(emp.EmployeeID.Value, ord.EmployeeID.Value); // Test testEmp.LoadByPrimaryKey(empKey); testEmp.OrderCollectionByEmployeeID.MarkAllAsDeleted(); testEmp.CustomerCollectionByStaffAssigned.MarkAllAsDeleted(); testEmp.MarkAsDeleted(); testEmp.Save(); emp = new Employee(); emp.es.Connection.Name = "ForeignKeyTest"; Assert.IsFalse(emp.LoadByPrimaryKey(empKey)); ord = new Order(); ord.es.Connection.Name = "ForeignKeyTest"; Assert.IsFalse(ord.LoadByPrimaryKey(ordKey)); cust = new Customer(); cust.es.Connection.Name = "ForeignKeyTest"; Assert.IsFalse(cust.LoadByPrimaryKey("YYYYY", "YYY")); } } finally { // Clean up ord = new Order(); ord.es.Connection.Name = "ForeignKeyTest"; if (ord.LoadByPrimaryKey(ordKey)) { ord.MarkAsDeleted(); ord.Save(); } cust = new Customer(); cust.es.Connection.Name = "ForeignKeyTest"; if (cust.LoadByPrimaryKey("YYYYY", "YYY")) { cust.MarkAsDeleted(); cust.Save(); } emp = new Employee(); emp.es.Connection.Name = "ForeignKeyTest"; if (emp.LoadByPrimaryKey(empKey)) { emp.MarkAsDeleted(); emp.Save(); } custGroup = new CustomerGroup(); custGroup.es.Connection.Name = "ForeignKeyTest"; if (custGroup.LoadByPrimaryKey("YYYYY")) { custGroup.MarkAsDeleted(); custGroup.Save(); } } }
public void ErrorsWithContinueTrueNoFailures() { EmployeeCollection coll = new EmployeeCollection(); coll.es.Connection.Name = "ForeignKeyTest"; coll.LoadAll(); Assert.AreEqual(5, coll.Count, "Initial Load"); using (esTransactionScope scope = new esTransactionScope()) { // INSERT will succeed Employee emp5 = coll.AddNew(); emp5.FirstName = "First5"; emp5.LastName = "Last5"; coll.Save(true); Assert.AreEqual(0, coll.Errors.Count(), "ErrorsCount"); Assert.IsNull(coll.es.DeletedEntities, "DeletedErrors"); // Confirm only 1 row got INSERTed EmployeeCollection coll2 = new EmployeeCollection(); coll2.es.Connection.Name = "ForeignKeyTest"; coll2.LoadAll(); Assert.AreEqual(6, coll2.Count, "Load"); // Confirm auto-incremeting PKs are brought back // and delete the successfully inserted row int emp5Id = emp5.EmployeeID.Value; Employee emp5Ins = new Employee(); emp5Ins.es.Connection.Name = "ForeignKeyTest"; Assert.IsTrue(emp5Ins.LoadByPrimaryKey(emp5Id), "LoadByPK2"); emp5Ins.MarkAsDeleted(); emp5Ins.Save(); } }
public void TestSaveFromCollection() { int empKey = -1; CustomerGroup custGroup = new CustomerGroup(); custGroup.es.Connection.Name = "ForeignKeyTest"; EmployeeCollection empColl = new EmployeeCollection(); empColl.es.Connection.Name = "ForeignKeyTest"; Employee emp = new Employee(); emp.es.Connection.Name = "ForeignKeyTest"; Customer cust = new Customer(); cust.es.Connection.Name = "ForeignKeyTest"; try { using (esTransactionScope scope = new esTransactionScope()) { custGroup.GroupID = "XXXXX"; custGroup.GroupName = "Test"; custGroup.Save(); emp = empColl.AddNew(); emp.LastName = "LastName"; emp.FirstName = "FirstName"; cust = emp.CustomerCollectionByStaffAssigned.AddNew(); cust.CustomerID = "XXXXX"; cust.CustomerSub = "XXX"; cust.CustomerName = "Test"; cust.str().DateAdded = "2007-01-01 00:00:00"; cust.Active = true; cust.Manager = 1; empColl.Save(); empKey = emp.EmployeeID.Value; Assert.AreEqual(1, emp.CustomerCollectionByStaffAssigned.Count); Assert.AreEqual(emp.EmployeeID.Value, cust.StaffAssigned.Value); } } finally { // Clean up emp = new Employee(); emp.es.Connection.Name = "ForeignKeyTest"; if (emp.LoadByPrimaryKey(empKey)) { CustomerCollection custColl = emp.CustomerCollectionByStaffAssigned; custColl.MarkAllAsDeleted(); emp.MarkAsDeleted(); emp.Save(); } custGroup = new CustomerGroup(); custGroup.es.Connection.Name = "ForeignKeyTest"; if (custGroup.LoadByPrimaryKey("XXXXX")) { custGroup.MarkAsDeleted(); custGroup.Save(); } } }
public void ErrorsWithContinueTrueDel() { EmployeeCollection coll = new EmployeeCollection(); coll.es.Connection.Name = "ForeignKeyTest"; coll.LoadAll(); Assert.AreEqual(5, coll.Count, "Initial Load"); using (esTransactionScope scope = new esTransactionScope()) { // SQLite does not enforce FK constraints // So force a concurrency failure instead if (coll.es.Connection.ProviderSignature.DataProviderName == "EntitySpaces.SQLiteProvider") { Employee empConcurr = new Employee(); empConcurr.es.Connection.Name = "ForeignKeyTest"; empConcurr.LoadByPrimaryKey(2); empConcurr.MarkAsDeleted(); empConcurr.Save(); } // DELETE will fail - FK constraint Employee emp4 = coll.FindByPrimaryKey(2); emp4.MarkAsDeleted(); coll.Save(true); Assert.AreEqual(1, coll.Errors.Count(), "ErrorsCount"); Assert.IsNotNull(coll.es.DeletedEntities, "DeletedErrors"); foreach (Employee e in coll.Errors) { Assert.IsTrue(e.es.RowError.Length > 0); } if (coll.es.Connection.ProviderSignature.DataProviderName != "EntitySpaces.SQLiteProvider") { // Confirm same table row count EmployeeCollection coll2 = new EmployeeCollection(); coll2.es.Connection.Name = "ForeignKeyTest"; coll2.LoadAll(); Assert.AreEqual(5, coll2.Count, "Load"); // Confirm nothing got DELETEd Employee empDel = new Employee(); empDel.es.Connection.Name = "ForeignKeyTest"; Assert.IsTrue(empDel.LoadByPrimaryKey(2), "Delete"); } } }
public void ErrorsWithContinueTrueInsUpdDel() { EmployeeCollection coll = new EmployeeCollection(); coll.es.Connection.Name = "ForeignKeyTest"; coll.LoadAll(); Assert.AreEqual(5, coll.Count, "Initial Load"); using (esTransactionScope scope = new esTransactionScope()) { // SQLite does not enforce FK constraints // So force a concurrency failure instead if (coll.es.Connection.ProviderSignature.DataProviderName == "EntitySpaces.SQLiteProvider") { Employee empConcurr = new Employee(); empConcurr.es.Connection.Name = "ForeignKeyTest"; empConcurr.LoadByPrimaryKey(2); empConcurr.MarkAsDeleted(); empConcurr.Save(); } // INSERT will succeed Employee emp1 = coll.AddNew(); emp1.FirstName = "First1"; emp1.LastName = "Last1"; // INSERT will fail - LastName required Employee emp2 = coll.AddNew(); // UPDATE will fail - LastName required Employee emp3 = coll.FindByPrimaryKey(1); emp3.LastName = null; // DELETE will fail - FK constraint Employee emp4 = coll.FindByPrimaryKey(2); emp4.MarkAsDeleted(); // INSERT will succeed Employee emp5 = coll.AddNew(); emp5.FirstName = "First5"; emp5.LastName = "Last5"; coll.Save(true); Assert.AreEqual(3, coll.Errors.Count(), "ErrorsCount"); Assert.IsNotNull(coll.es.DeletedEntities, "DeletedErrors"); foreach (Employee e in coll.Errors) { Assert.IsTrue(e.es.RowError.Length > 0); } // Confirm only 2 rows got INSERTed EmployeeCollection coll2 = new EmployeeCollection(); coll2.es.Connection.Name = "ForeignKeyTest"; coll2.LoadAll(); if (coll.es.Connection.ProviderSignature.DataProviderName == "EntitySpaces.SQLiteProvider") { Assert.AreEqual(6, coll2.Count, "Load"); } else { Assert.AreEqual(7, coll2.Count, "Load"); // Confirm nothing got DELETEd Employee empDel = new Employee(); empDel.es.Connection.Name = "ForeignKeyTest"; Assert.IsTrue(empDel.LoadByPrimaryKey(2), "Delete"); } // Confirm nothing got UPDATEd Employee empUpd = new Employee(); empUpd.es.Connection.Name = "ForeignKeyTest"; Assert.IsTrue(empUpd.LoadByPrimaryKey(1)); Assert.AreEqual("Smith", empUpd.LastName, "Update"); // Confirm auto-incremeting PKs are brought back // and delete the 2 successfully inserted rows int emp1Id = emp1.EmployeeID.Value; Employee emp1Ins = new Employee(); emp1Ins.es.Connection.Name = "ForeignKeyTest"; Assert.IsTrue(emp1Ins.LoadByPrimaryKey(emp1Id), "LoadByPK1"); emp1Ins.MarkAsDeleted(); emp1Ins.Save(); int emp5Id = emp5.EmployeeID.Value; Employee emp5Ins = new Employee(); emp5Ins.es.Connection.Name = "ForeignKeyTest"; Assert.IsTrue(emp5Ins.LoadByPrimaryKey(emp5Id), "LoadByPK2"); emp5Ins.MarkAsDeleted(); emp5Ins.Save(); } }
public void ErrorsWithContinueTrueInsUpd() { using (esTransactionScope scope = new esTransactionScope()) { EmployeeCollection coll = new EmployeeCollection(); coll.es.Connection.Name = "ForeignKeyTest"; // This employee should save fine Employee e = coll.AddNew(); e.FirstName = "Test1"; e.LastName = "K98700"; // Should fail, missing LastName e = coll.AddNew(); e.FirstName = "Joe"; // Should fail, missing FirstName e = coll.AddNew(); e.LastName = "Kokomo"; // This employee should save fine e = coll.AddNew(); e.FirstName = "Test4"; e.LastName = "K98700"; try { coll.Save(true); // ContinueUpdateOnError } catch { Assert.Fail("1. We shouldn't get here"); } Assert.IsTrue(coll.Errors.Count() == 2, "Count"); Assert.IsTrue(coll[0].es.RowState == esDataRowState.Unchanged, "Unchanged0"); Assert.IsTrue(coll[1].es.RowState == esDataRowState.Added, "Added1"); Assert.IsTrue(coll[2].es.RowState == esDataRowState.Added, "Added2"); Assert.IsTrue(coll[3].es.RowState == esDataRowState.Unchanged, "Unchanged3"); Assert.IsTrue(coll[0].EmployeeID != null, "Id0"); Assert.IsTrue(coll[1].EmployeeID == null, "Id1"); Assert.IsTrue(coll[2].EmployeeID == null, "Id2"); Assert.IsTrue(coll[3].EmployeeID != null, "Id3"); foreach (Employee emp in coll.Errors) { Assert.IsTrue(emp.es.RowState == esDataRowState.Added, "ForeachRowSate"); Assert.IsTrue(emp.es.RowError != null, "ForeachRowError"); Assert.IsTrue(emp.es.RowError.Length > 0, "ForeachLength"); } // Call Save again with the 2 bad records just for kicks try { coll.Save(true); // ContinueUpdateOnError } catch { Assert.Fail("2. We shouldn't get here, either"); } Assert.IsTrue(coll.Errors.Count() == 2); // Fix our two bad records and call Save again coll[1].LastName = "LastName"; coll[2].FirstName = "FirstName"; try { coll.Save(true); // ContinueUpdateOnError } catch { Assert.Fail("3. We shouldn't get here, either"); } Assert.IsTrue(coll.Errors.Count() == 0); // Load the two original records and see if they were saved even though during the // save there were two bad records coll = new EmployeeCollection(); coll.es.Connection.Name = "ForeignKeyTest"; coll.Query.Where(coll.Query.LastName == "K98700"); coll.Query.Load(); Assert.IsTrue(coll.Count() == 2, "FinalCount"); } }
public void ErrorsWithContinueDefaultFalse() { EmployeeCollection coll = new EmployeeCollection(); coll.es.Connection.Name = "ForeignKeyTest"; coll.LoadAll(); Assert.AreEqual(5, coll.Count, "Initial Load"); using (esTransactionScope scope = new esTransactionScope()) { try { // INSERT would succeed // but should rollback by default Employee emp1 = coll.AddNew(); emp1.FirstName = "asdf"; emp1.LastName = "adf"; // INSERT will fail - LastName required Employee emp2 = coll.AddNew(); // UPDATE will fail - LastName required Employee emp3 = coll.FindByPrimaryKey(1); emp3.LastName = null; // DELETE will fail - FK constraint Employee emp4 = coll.FindByPrimaryKey(2); emp4.MarkAsDeleted(); coll.Save(false); } catch (Exception ex) { // Save() throws exception on first error encountered Assert.AreEqual(1, coll.Errors.Count(), "ExceptionCount"); Assert.IsTrue(ex.ToString().Length > 0, "ExceptionLength"); } finally { // Confirm nothing got INSERTed EmployeeCollection coll2 = new EmployeeCollection(); coll2.es.Connection.Name = "ForeignKeyTest"; coll2.LoadAll(); Assert.AreEqual(5, coll2.Count, "LoadInFinally"); // Confirm nothing got UPDATEd Employee empUpd = coll2.FindByPrimaryKey(1); Assert.AreEqual("Smith", empUpd.LastName, "Update"); // Confirm nothing got DELETEd Employee empDel = new Employee(); empDel.es.Connection.Name = "ForeignKeyTest"; Assert.IsTrue(empDel.LoadByPrimaryKey(2), "Delete"); } } }
public void CollectionMixedInsUpdDel() { using (esTransactionScope scope = new esTransactionScope()) { // Setup Employee newEmp = new Employee(); newEmp.es.Connection.Name = "ForeignKeyTest"; newEmp.LastName = "new"; newEmp.FirstName = "new"; newEmp.Save(); EmployeeCollection coll = new EmployeeCollection(); coll.es.Connection.Name = "ForeignKeyTest"; coll.LoadAll(); Assert.AreEqual(6, coll.Count, "Initial Load"); // Insert Employee emp1 = coll.AddNew(); emp1.FirstName = "emp1"; emp1.LastName = "emp1"; // Update Employee emp3 = coll.FindByPrimaryKey(1); emp3.LastName = "emp3"; // Delete Employee emp4 = coll.FindByPrimaryKey(newEmp.EmployeeID.Value); emp4.MarkAsDeleted(); coll.Save(); // Confirm INSERT Employee empIns = new Employee(); empIns.es.Connection.Name = "ForeignKeyTest"; Assert.IsTrue(empIns.LoadByPrimaryKey(emp1.EmployeeID.Value), "Insert"); // Confirm UPDATE Employee empUpd = new Employee(); empUpd.es.Connection.Name = "ForeignKeyTest"; Assert.IsTrue(empUpd.LoadByPrimaryKey(1), "Update"); Assert.AreEqual("emp3", empUpd.LastName, "UpdateValue"); // Confirm DELETE Employee empDel = new Employee(); empDel.es.Connection.Name = "ForeignKeyTest"; Assert.IsFalse(empDel.LoadByPrimaryKey(newEmp.EmployeeID.Value), "Delete"); } }