public void AlterTableAddField()
        {
            var provider = new SqliteContextProvider(ConnectionString);
            using (var context = provider.Open())
            {
                context.Database.Table<Weapon>()
                    .Key(wpn => wpn.ID)
                    .Create();

                context.Database.Table<Warrior>()
                    .Key(wrir => wrir.ID)
                    .ForeignKey<Weapon>(wrir => wrir.WeaponID, wpn => wpn.ID)
                    .Ignore(wrir => wrir.Race)
                    .Create();

                context.Commit();

                //TODO: Check table definition

                context.Database.Table<Warrior>()
                    .Column(wrir => wrir.Race, FieldOperation.Add)
                    .Alter();

                context.Commit();

                //TODO: Check table definition

                var tables = context.Select<Sqlite_Master>(m => m.Type == "table");
                Assert.IsTrue(tables.Any(t => t.Name == typeof(Warrior).Name));
                Assert.IsTrue(tables.Any(t => t.Name == typeof(Weapon).Name));
            }
        }
        public void SelectWithJoinAndMap()
        {
            var provider = new SqliteContextProvider(ConnectionString);
            using (var context = provider.Open())
            {
                var wrirWithWeapon = context.From<Warrior>()
                    .Map(wrir => wrir.Name, "WarriorName")
                    .Join<Weapon>((wpn, wrir) => wpn.ID == wrir.WeaponID)
                    .Map(wpn => wpn.Name, "WeaponName")
                    .Where<Warrior>(wrir => wrir.ID == 3)
                    .Select(() => new
                    {
                        WeaponName = "",
                        WarriorName = "",
                        Damage = 0
                    });

                Assert.IsTrue(wrirWithWeapon.First().WarriorName == "Burt");

                var parts = context.From<Warrior>()
                    .Join<Weapon>((wpn, wrir) => wpn.ID == wrir.WeaponID)
                    .Join<Armour, Warrior>((a, wrir) => a.WarriorID == wrir.ID)
                    .Join<ArmourPart>((ap, a) => ap.ID == a.ArmourPartID)
                    .Map(ap => ap.ID)
                    .Map(ap => ap.Name)
                    .Where<Warrior>(wrir => wrir.Name == "Harry")
                    .Select();

                Assert.IsTrue(parts.Count() == 3);
            }
        }
Beispiel #3
0
        public void Work()
        {
            var provider = new SqliteContextProvider(DatabaseManager.ConnectionString);

            // add interceptor that traces the query string before it is executed
            provider.Interceptor<WarriorWithArmour>().BeforeExecute(q => Trace.WriteLine(q.QueryString.Flatten()));

            using (var context = provider.Open())
            {
                var item = context.From<Warrior>()
                .Map(w => w.ID)
                .Map(w => w.Name)
                .Join<Armour>((a, w) => a.WarriorID == w.ID)
                .Join<ArmourPart>((ap, a) => ap.ID == a.ArmourPartID)
                .Join<Weapon, Warrior>((w, wa) => w.ID == wa.WeaponID)
                .For<WarriorWithArmour>()
                .Map<Weapon>(w => w.Name, wa => wa.WeaponName)
                .Map<Armour>(a => a.Name, wa => wa.ArmourName)
                .Select();
            }

            provider.Interceptor<Warrior>().BeforeExecute(q => Trace.WriteLine(q.QueryString.Flatten()));
            using (var context = provider.Open())
            {
                var tmp = context.From<Warrior>().Select(w => new
                {
                    w.ID,
                    w.Name,
                    w.Race
                });
            }
        }
        internal static void CreateDatabase(bool insertData = false)
        {
            var provider = new SqliteContextProvider(ConnectionString);
            using (var context = provider.Open())
            {
                context.Database.Table<Weapon>().Key(wpn => wpn.ID).Create();

                context.Database.Table<Warrior>()
                    .Key(wrir => wrir.ID)
                    .ForeignKey<Weapon>(wrir => wrir.WeaponID, wpn => wpn.ID)
                    .Create();

                context.Database.Table<ArmourPart>()
                    .Key(ap => ap.ID)
                    .Create();

                context.Database.Table<Armour>()
                    .ForeignKey<Weapon>(a => a.WarriorID, wpn => wpn.ID)
                    .ForeignKey<ArmourPart>(a => a.ArmourPartID, ap => ap.ID)
                    .Create();

                context.Commit();

                if (!insertData)
                    return;

                context.Insert<Weapon>(() => new Weapon { ID = 1, Name = "Sword", Damage = 40 });
                context.Insert<Weapon>(() => new Weapon { ID = 2, Name = "Dagger", Damage = 5 });
                context.Insert<Weapon>(() => new Weapon { ID = 3, Name = "Ax", Damage = 50 });
                context.Insert<Weapon>(() => new Weapon { ID = 4, Name = "Hammer", Damage = 70 });
                context.Insert<Weapon>(() => new Weapon { ID = 5, Name = "Staff", Damage = 20 });

                context.Insert<Warrior>(() => new Warrior { ID = 1, Name = "Ruben", Race = "Elf", SpecialSkill = "Magic claw", WeaponID = 5 });
                context.Insert<Warrior>(() => new Warrior { ID = 2, Name = "Harry", Race = "Dwarf", SpecialSkill = "Fistblow", WeaponID = 3 });
                context.Insert<Warrior>(() => new Warrior { ID = 3, Name = "Burt", Race = "Human", SpecialSkill = "Stomp", WeaponID = 3 });

                context.Insert<ArmourPart>(() => new ArmourPart { ID = 1, Name = "Shoulderplate", Defense = 5 });
                context.Insert<ArmourPart>(() => new ArmourPart { ID = 2, Name = "Glove", Defense = 5 });
                context.Insert<ArmourPart>(() => new ArmourPart { ID = 3, Name = "Breastplate", Defense = 30 });
                context.Insert<ArmourPart>(() => new ArmourPart { ID = 4, Name = "Shield", Defense = 50 });
                context.Insert<ArmourPart>(() => new ArmourPart { ID = 5, Name = "Breastleather", Defense = 20 });

                context.Insert<Armour>(() => new Armour { ArmourPartID = 1, WarriorID = 1 });
                context.Insert<Armour>(() => new Armour { ArmourPartID = 5, WarriorID = 1 });
                context.Insert<Armour>(() => new Armour { ArmourPartID = 4, WarriorID = 1 });

                context.Insert<Armour>(() => new Armour { ArmourPartID = 1, WarriorID = 2 });
                context.Insert<Armour>(() => new Armour { ArmourPartID = 2, WarriorID = 2 });
                context.Insert<Armour>(() => new Armour { ArmourPartID = 3, WarriorID = 2 });

                context.Insert<Armour>(() => new Armour { ArmourPartID = 1, WarriorID = 3 });
                context.Insert<Armour>(() => new Armour { ArmourPartID = 2, WarriorID = 1 });
                context.Insert<Armour>(() => new Armour { ArmourPartID = 5, WarriorID = 1 });
                context.Insert<Armour>(() => new Armour { ArmourPartID = 4, WarriorID = 1 });

                context.Commit();
            }
        }
 public void AddFieldByStringFail()
 {
     var provider = new SqliteContextProvider(ConnectionString);
     using (var context = provider.Open())
     {
         context.Database.Table<Warrior>().Ignore(wrir => wrir.Race).Create();
         Assert.Throws<ArgumentNullException>(() => context.Database.Table<Warrior>().Column("Race", FieldOperation.Add).Alter());
     }
 }
 public void AddFieldByString()
 {
     var provider = new SqliteContextProvider(ConnectionString);
     var logger = new MessageStackLogger();
     provider.Settings.AddLogger(logger);
     using (var context = provider.Open())
     {
         context.Database.Table<Warrior>().Ignore(wrir => wrir.Race).Create();
         context.Database.Table<Warrior>().Column("Race", FieldOperation.Add, typeof(string)).Alter();
         context.Commit();
     }
 }
        public void SimpleSelect()
        {
            var provider = new SqliteContextProvider(ConnectionString);
            using (var context = provider.Open())
            {
                var warriors = context.Select<Warrior>();
                Assert.IsTrue(warriors.Count() == 3);

                warriors = context.Select<Warrior>(wrir => wrir.Race == "Elf");
                Assert.IsTrue(warriors.Count() == 1);
                Assert.IsTrue(warriors.First().Race == "Elf");

                warriors = context.From<Warrior>(wrir => wrir.Race == "Dwarf").Select();
                Assert.IsTrue(warriors.Count() == 1);
                Assert.IsTrue(warriors.First().Race == "Dwarf");
            }
        }
Beispiel #8
0
        public void Work()
        {
            // this method shows how the
            _log = new List<string>();
            int count = 100;

            DatabaseManager.CreateDatabase();

            var stopwatch = new Stopwatch();
            stopwatch.Start();

            var provider = new SqliteContextProvider(DatabaseManager.ConnectionString);
            using (var context = provider.Open())
            {
                using (var uow = new UnitOfWork(context))
                {
                    for (int i = 0; i < count; i++)
                    {
                        DoReadWork(uow, i);
                    }
                }
            }

            stopwatch.Stop();
            _log.Add(string.Format("Creating one context for {0} selects calls took {1} ms", count, stopwatch.ElapsedMilliseconds));

            stopwatch.Reset();
            stopwatch.Start();

            for (int i = 0; i < count; i++)
            {
                using (var uow = new UnitOfWork(DatabaseManager.ConnectionString))
                {
                    DoReadWork(uow, i);
                }
            }

            stopwatch.Stop();
            _log.Add(string.Format("Creating a context per call for {0} selects calls took {1} ms", count, stopwatch.ElapsedMilliseconds));

            PrintLog();
        }
        public void RenameTable()
        {
            var provider = new SqliteContextProvider(ConnectionString);
            using (var context = provider.Open())
            {
                // create a table to drop later in the test
                context.Database.Table<Warrior>().Create();

                context.Commit();

                // drop the table
                context.Database.Table<Warrior>().RenameTo<Solidier>();

                context.Commit();

                var tables = context.Select<Sqlite_Master>(m => m.Type == "table");
                Assert.IsTrue(tables.Any(t => t.Name == typeof(Solidier).Name));
                Assert.IsFalse(tables.Any(t => t.Name == typeof(Warrior).Name));
            }
        }
        public void GetDatabaseFromConnectionStringTest()
        {
            var provider = new SqliteContextProvider(ConnectionString);
            using (var context = provider.Open())
            {
                Assert.AreEqual(DatabaseName, context.ConnectionProvider.Database);

                context.ConnectionProvider.Database = "Test.db";
                Assert.AreEqual(context.ConnectionProvider.Database, "Test.db");
            }
        }
        public void DropTable()
        {
            var provider = new SqliteContextProvider(ConnectionString);
            using (var context = provider.Open())
            {
                // create a table to drop later in the test
                context.Database.Table<Weapon>()
                    .Key(wpn => wpn.ID)
                    .Create();

                context.Commit();

                var tables = context.Select<Sqlite_Master>(m => m.Type == "table");
                Assert.IsTrue(tables.Any(t => t.Name == typeof(Weapon).Name));

                // drop the table
                context.Database.Table<Weapon>()
                    .Drop();

                context.Commit();

                tables = context.Select<Sqlite_Master>(m => m.Type == "table");
                Assert.IsFalse(tables.Any(t => t.Name == typeof(Weapon).Name));
            }
        }
        public void CreateTableNotNullableColumn()
        {
            var provider = new SqliteContextProvider(ConnectionString);
            var logger = new MessageStackLogger();
            provider.Settings.AddLogger(logger);
            using (var context = provider.Open())
            {
                // table with a foreign key
                context.Database.Table<Warrior>()
                    .Column(wrir => wrir.ID)
                    .Column(wrir => wrir.Race, isNullable: false)
                    .Create();

                Assert.IsFalse(File.Exists(DatabaseName));

                //context.QueryCommandStore.First().Execute(context);

                context.Commit();

                Assert.AreEqual(logger.Logs.First().Message.Flatten(), "CREATE TABLE IF NOT EXISTS Warrior (ID int NOT NULL, Race varchar(1000) NOT NULL, Name varchar(1000), WeaponID int NOT NULL, SpecialSkill varchar(1000))");
            }
        }
        public void CreateTableMultyKey()
        {
            var provider = new SqliteContextProvider(ConnectionString);
            using (var context = provider.Open())
            {
                // table with multiple columns for key
                context.Database.Table<Warrior>()
                    .Key(wrir => wrir.ID, wrir => wrir.WeaponID)
                    .Create();

                Assert.IsFalse(File.Exists(DatabaseName));

                context.Commit();

                Assert.IsTrue(File.Exists(DatabaseName));
            }
        }
        public void CreateTableForeignKey()
        {
            var provider = new SqliteContextProvider(ConnectionString);
            using (var context = provider.Open())
            {
                context.Database.Table<Weapon>()
                    .Key(wpn => wpn.ID)
                    .Create();

                // table with a foreign key
                context.Database.Table<Warrior>()
                    .Key(wrir => wrir.ID)
                    .ForeignKey<Weapon>(wrir => wrir.WeaponID, wpn => wpn.ID)
                    .Create();

                Assert.IsFalse(File.Exists(DatabaseName));

                context.Commit();

                Assert.IsTrue(File.Exists(DatabaseName));

                var tables = context.Select<Sqlite_Master>(m => m.Type == "table");
                Assert.IsTrue(tables.Any(t => t.Name == typeof(Warrior).Name));
                Assert.IsTrue(tables.Any(t => t.Name == typeof(Weapon).Name));
            }
        }
 public UnitOfWork(string connectionString)
 {
     var connection = new SqliteContextProvider(connectionString);
     _context = connection.Open();
 }