public void TestUpdateSetOneToOneRelationshipWithInverseForeignKey() { var conn = Utils.CreateConnection(); conn.DropTable <O2OClassF>(); conn.DropTable <O2OClassE>(); conn.CreateTable <O2OClassF>(); conn.CreateTable <O2OClassE>(); // Use standard SQLite-Net API to create a new relationship var objectF = new O2OClassF { Bar = string.Format("Bar String {0}", new Random().Next(100)) }; conn.Insert(objectF); var objectE = new O2OClassE(); conn.Insert(objectE); // Set the relationship using objects objectF.ObjectE = objectE; Assert.AreEqual(0, objectE.ObjectFKey); conn.UpdateWithChildren(objectF); Assert.AreEqual(objectF.Id, objectE.ObjectFKey, "Foreign key should have been refreshed"); Assert.AreSame(objectF, objectE.ObjectF, "Inverse relationship hasn't been set"); // Fetch the relationship var newObjectA = conn.Get <O2OClassE>(objectE.Id); Assert.AreEqual(objectF.Id, newObjectA.ObjectFKey, "Foreign key should have been refreshed in database"); }
public void TestGetInverseOneToOneRelationshipWithExplicitKey() { var conn = Utils.CreateConnection(); conn.DropTable <O2OClassE>(); conn.DropTable <O2OClassF>(); conn.CreateTable <O2OClassE>(); conn.CreateTable <O2OClassF>(); // Use standard SQLite-Net API to create a new relationship var objectF = new O2OClassF { Bar = string.Format("Bar String {0}", new Random().Next(100)) }; conn.Insert(objectF); var objectE = new O2OClassE { Foo = string.Format("Foo String {0}", new Random().Next(100)) }; conn.Insert(objectE); Assert.Null(objectF.ObjectE); // Fetch (yet empty) the relationship conn.GetChildren(objectF); Assert.Null(objectF.ObjectE); // Set the relationship using IDs objectE.ObjectFKey = objectF.Id; conn.Update(objectE); Assert.Null(objectF.ObjectE); // Fetch the relationship conn.GetChildren(objectF); Assert.NotNull(objectF.ObjectE); Assert.AreEqual(objectE.Foo, objectF.ObjectE.Foo); // Check the inverse relationship Assert.NotNull(objectF.ObjectE.ObjectF); Assert.AreEqual(objectF.Id, objectF.ObjectE.ObjectF.Id); Assert.AreEqual(objectF.Bar, objectF.ObjectE.ObjectF.Bar); Assert.AreSame(objectF, objectF.ObjectE.ObjectF); }