Example #1
0
        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");
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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");
        }