public void TestGetOneToManyArray()
        {
            var conn = Utils.CreateConnection();
            conn.DropTable<O2MClassE>();
            conn.DropTable<O2MClassF>();
            conn.CreateTable<O2MClassE>();
            conn.CreateTable<O2MClassF>();

            // Use standard SQLite-Net API to create the objects
            var objectsF = new[]
            {
                new O2MClassF {
                    Foo = string.Format("1- Foo String {0}", new Random().Next(100))
                },
                new O2MClassF {
                    Foo = string.Format("2- Foo String {0}", new Random().Next(100))
                },
                new O2MClassF {
                    Foo = string.Format("3- Foo String {0}", new Random().Next(100))
                },
                new O2MClassF {
                    Foo = string.Format("4- Foo String {0}", new Random().Next(100))
                }
            };
            conn.InsertAll(objectsF);

            var objectE = new O2MClassE();
            conn.Insert(objectE);

            Assert.Null(objectE.FObjects);

            // Fetch (yet empty) the relationship
            conn.GetChildren(objectE);
            Assert.NotNull(objectE.FObjects);
            Assert.AreEqual(0, objectE.FObjects.Length);

            // Set the relationship using IDs
            foreach (var objectB in objectsF)
            {
                objectB.ClassEKey = objectE.Id;
                conn.Update(objectB);
            }

            Assert.NotNull(objectE.FObjects);
            Assert.AreEqual(0, objectE.FObjects.Length);

            // Fetch the relationship
            conn.GetChildren(objectE);

            Assert.NotNull(objectE.FObjects);
            Assert.AreEqual(objectsF.Length, objectE.FObjects.Length);
            var foos = objectsF.Select(objectF => objectF.Foo).ToList();
            foreach (var objectF in objectE.FObjects)
            {
                Assert.IsTrue(foos.Contains(objectF.Foo));
            }
        }
Exemplo n.º 2
0
        public void TestUpdateSetOneToManyArray()
        {
            var conn = Utils.CreateConnection();

            conn.DropTable <O2MClassE>();
            conn.DropTable <O2MClassF>();
            conn.CreateTable <O2MClassE>();
            conn.CreateTable <O2MClassF>();

            // Use standard SQLite-Net API to create the objects
            var objectsF = new[]
            {
                new O2MClassF {
                    Foo = string.Format("1- Foo String {0}", new Random().Next(100))
                },
                new O2MClassF {
                    Foo = string.Format("2- Foo String {0}", new Random().Next(100))
                },
                new O2MClassF {
                    Foo = string.Format("3- Foo String {0}", new Random().Next(100))
                },
                new O2MClassF {
                    Foo = string.Format("4- Foo String {0}", new Random().Next(100))
                }
            };

            conn.InsertAll(objectsF);

            var objectE = new O2MClassE();

            conn.Insert(objectE);

            Assert.Null(objectE.FObjects);

            objectE.FObjects = objectsF;

            foreach (var objectF in objectsF)
            {
                Assert.AreEqual(0, objectF.ClassEKey, "Foreign keys shouldn't have been updated yet");
            }


            conn.UpdateWithChildren(objectE);

            foreach (var objectF in objectE.FObjects)
            {
                Assert.AreEqual(objectE.Id, objectF.ClassEKey, "Foreign keys haven't been updated yet");

                // Check database values
                var newObjectF = conn.Get <O2MClassB>(objectF.Id);
                Assert.AreEqual(objectE.Id, newObjectF.ClassAKey, "Database stored value is not correct");
            }
        }
        public void TestUpdateSetOneToManyArray()
        {
            var conn = Utils.CreateConnection();
            conn.DropTable<O2MClassE>();
            conn.DropTable<O2MClassF>();
            conn.CreateTable<O2MClassE>();
            conn.CreateTable<O2MClassF>();

            // Use standard SQLite-Net API to create the objects
            var objectsF = new[]
            {
                new O2MClassF {
                    Foo = string.Format("1- Foo String {0}", new Random().Next(100))
                },
                new O2MClassF {
                    Foo = string.Format("2- Foo String {0}", new Random().Next(100))
                },
                new O2MClassF {
                    Foo = string.Format("3- Foo String {0}", new Random().Next(100))
                },
                new O2MClassF {
                    Foo = string.Format("4- Foo String {0}", new Random().Next(100))
                }
            };
            conn.InsertAll(objectsF);

            var objectE = new O2MClassE();
            conn.Insert(objectE);

            Assert.Null(objectE.FObjects);

            objectE.FObjects = objectsF;

            foreach (var objectF in objectsF)
            {
                Assert.AreEqual(0, objectF.ClassEKey, "Foreign keys shouldn't have been updated yet");
            }


            conn.UpdateWithChildren(objectE);

            foreach (var objectF in objectE.FObjects)
            {
                Assert.AreEqual(objectE.Id, objectF.ClassEKey, "Foreign keys haven't been updated yet");

                // Check database values
                var newObjectF = conn.Get<O2MClassB>(objectF.Id);
                Assert.AreEqual(objectE.Id, newObjectF.ClassAKey, "Database stored value is not correct");
            }

        }