public void TestUpdateSetOneToOneRelationship() { var conn = Utils.CreateConnection(); conn.DropTable <O2OClassA>(); conn.DropTable <O2OClassB>(); conn.CreateTable <O2OClassA>(); conn.CreateTable <O2OClassB>(); // Use standard SQLite-Net API to create a new relationship var objectB = new O2OClassB { Foo = string.Format("Foo String {0}", new Random().Next(100)) }; conn.Insert(objectB); var objectA = new O2OClassA(); conn.Insert(objectA); // Set the relationship using objects objectA.OneClassB = objectB; Assert.AreEqual(0, objectA.OneClassBKey); conn.UpdateWithChildren(objectA); Assert.AreEqual(objectB.Id, objectA.OneClassBKey, "Foreign key should have been refreshed"); // Fetch the relationship var newObjectA = conn.Get <O2OClassA>(objectA.Id); Assert.AreEqual(objectB.Id, newObjectA.OneClassBKey, "Foreign key should have been refreshed in database"); }
public void TestGetAllNoFilter() { var conn = Utils.CreateConnection(); conn.DropTable <O2OClassA>(); conn.DropTable <O2OClassB>(); conn.CreateTable <O2OClassA>(); conn.CreateTable <O2OClassB>(); var a1 = new O2OClassA(); var a2 = new O2OClassA(); var a3 = new O2OClassA(); var aObjects = new [] { a1, a2, a3 }; conn.InsertAll(aObjects); var b1 = new O2OClassB { Foo = "Foo 1" }; var b2 = new O2OClassB { Foo = "Foo 2" }; var b3 = new O2OClassB { Foo = "Foo 3" }; var bObjects = new [] { b1, b2, b3 }; conn.InsertAll(bObjects); a1.OneClassB = b1; a2.OneClassB = b2; a3.OneClassB = b3; conn.UpdateWithChildren(a1); conn.UpdateWithChildren(a2); conn.UpdateWithChildren(a3); var aElements = conn.GetAllWithChildren <O2OClassA>().OrderBy(a => a.Id).ToArray(); Assert.AreEqual(aObjects.Length, aElements.Length); for (int i = 0; i < aObjects.Length; i++) { Assert.AreEqual(aObjects[i].Id, aElements[i].Id); Assert.AreEqual(aObjects[i].OneClassB.Id, aElements[i].OneClassB.Id); Assert.AreEqual(aObjects[i].OneClassB.Foo, aElements[i].OneClassB.Foo); } }
public void TestGetOneToOneDirect() { var conn = Utils.CreateConnection(); conn.DropTable <O2OClassA>(); conn.DropTable <O2OClassB>(); conn.CreateTable <O2OClassA>(); conn.CreateTable <O2OClassB>(); // Use standard SQLite-Net API to create a new relationship var objectB = new O2OClassB { Foo = string.Format("Foo String {0}", new Random().Next(100)) }; conn.Insert(objectB); var objectA = new O2OClassA(); conn.Insert(objectA); Assert.Null(objectA.OneClassB); // Fetch (yet empty) the relationship conn.GetChildren(objectA); Assert.Null(objectA.OneClassB); // Set the relationship using IDs objectA.OneClassBKey = objectB.Id; conn.Update(objectA); Assert.Null(objectA.OneClassB); // Fetch the relationship conn.GetChildren(objectA); Assert.NotNull(objectA.OneClassB); Assert.AreEqual(objectB.Id, objectA.OneClassB.Id); Assert.AreEqual(objectB.Foo, objectA.OneClassB.Foo); }
public void TestUpdateUnsetOneToOneRelationship() { var conn = Utils.CreateConnection(); conn.DropTable <O2OClassA>(); conn.DropTable <O2OClassB>(); conn.CreateTable <O2OClassA>(); conn.CreateTable <O2OClassB>(); // Use standard SQLite-Net API to create a new relationship var objectB = new O2OClassB { Foo = string.Format("Foo String {0}", new Random().Next(100)) }; conn.Insert(objectB); var objectA = new O2OClassA(); conn.Insert(objectA); // Set the relationship using objects objectA.OneClassB = objectB; Assert.AreEqual(0, objectA.OneClassBKey); conn.UpdateWithChildren(objectA); Assert.AreEqual(objectB.Id, objectA.OneClassBKey, "Foreign key should have been refreshed"); // Until here, test is same that TestUpdateSetOneToOneRelationship objectA.OneClassB = null; // Unset relationship Assert.AreEqual(objectB.Id, objectA.OneClassBKey, "Foreign key shouldn't have been refreshed yet"); conn.UpdateWithChildren(objectA); Assert.AreEqual(0, objectA.OneClassBKey, "Foreign key hasn't been unset"); }