Beispiel #1
0
 public void AppendRowPoco(
     [Excel(
          Path = path,
          WorksheetName = worksheetName,
          TableName = tableName)] out SamplePoco row)
 {
     row = GetRangeAsPocoArray()[0];
 }
 public void XmlBlob()
 {
     MonkeyOrm.Settings.Interceptors.UnknownValueType = SerializeToXml;
     this.ConnectionFactory().Execute(
         @"CREATE TABLE `Test` (`Id` INT NOT NULL,`Data` INT,`Poco` TEXT, PRIMARY KEY (`Id`)) ENGINE=InnoDB");
     var containsPoco = new SamplePoco { Astring = "hello" };
     this.ConnectionFactory().Save("Test", new { Id = 10, Data = 5, Poco = containsPoco });
     dynamic result = this.ConnectionFactory().ReadOne("SELECT Id, Data, Poco FROM Test");
     Assert.AreEqual(10, result.Id);
     Assert.AreEqual(5, result.Data);
     Assert.AreEqual(SerializeToXml(containsPoco), result.Poco);
 }
    static void Main()
    {
        var obj1 = new SamplePoco {
            Field1 = 123
        };
        var obj2 = new SamplePoco {
            Field2 = "abc"
        };
        var merged = Merger.Merge(obj1, obj2);

        Console.WriteLine(merged.Field1);
        Console.WriteLine(merged.Field2);
    }
Beispiel #4
0
        public void BinaryBlob()
        {
            MonkeyOrm.Settings.Interceptors.UnknownValueType = SerializeToBinary;
            this.ConnectionFactory().Execute(
                @"CREATE TABLE `Test` (`Id` INT NOT NULL,`Data` INT,`Poco` VARBINARY(512), PRIMARY KEY (`Id`)) ENGINE=InnoDB");
            var containsPoco = new SamplePoco {
                Astring = "hello"
            };

            this.ConnectionFactory().Save("Test", new { Id = 10, Data = 5, Poco = containsPoco });
            dynamic result = this.ConnectionFactory().ReadOne("SELECT Id, Data, Poco FROM Test");

            Assert.AreEqual(10, result.Id);
            Assert.AreEqual(5, result.Data);
            Assert.AreEqual(SerializeToBinary(containsPoco), result.Poco);
        }
        static void Main(string[] args)
        {
            var exeDir  = AppDomain.CurrentDomain.BaseDirectory;
            var dbPath  = $"{exeDir}db.sqlite3";
            var connStr = $"DATA Source={dbPath}";

            using (var connection = new SQLiteConnection(connStr))
            {
                using (var context = new ApplicationDbContext(connection))
                {
                    // providerNameをコードを使って取得する。
                    // コードを使わずに、直接"System.Data.SQLite"を使ってもいい
                    // https://stackoverflow.com/questions/36060478/dbmigrator-does-not-detect-pending-migrations-after-switching-database
                    var internalContext = context.GetType().GetProperty("InternalContext", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(context);
                    var providerName    = (string)internalContext.GetType().GetProperty("ProviderName").GetValue(internalContext);

                    // Migratorが使うConfigurationを生成する。
                    // TargetDatabaseはDbMigratorの方ではなく、Configurationの方に設定しないと効果が無い。
                    var configuration = new Configuration()
                    {
                        TargetDatabase = new DbConnectionInfo(context.Database.Connection.ConnectionString, providerName)
                    };

                    // DbMigratorを生成する
                    var migrator = new DbMigrator(configuration);

                    // EF6.13では問題ないが、EF6.2の場合にUpdateのタイミングで以下の例外が吐かれないようにする対策
                    // System.ObjectDisposedException: '破棄されたオブジェクトにアクセスできません。
                    // オブジェクト名 'SQLiteConnection' です。'
                    // https://stackoverflow.com/questions/47329496/updating-to-ef-6-2-0-from-ef-6-1-3-causes-cannot-access-a-disposed-object-error/47518197
                    var _historyRepository  = migrator.GetType().GetField("_historyRepository", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(migrator);
                    var _existingConnection = _historyRepository.GetType().BaseType.GetField("_existingConnection", BindingFlags.Instance | BindingFlags.NonPublic);
                    _existingConnection.SetValue(_historyRepository, null);

                    // Migrationを実行する。
                    migrator.Update();

                    // データベースにアクセスして保存する例
                    if (context.Samples.Count() == 0)
                    {
                        var dummyItem = new SamplePoco()
                        {
                            Id   = 1,
                            Name = "Dummy"
                        };
                        context.Samples.Add(dummyItem);
                        context.SaveChanges();
                    }

                    // データベースにアクセスして保存する例
                    if (context.Tests.Count() == 0)
                    {
                        var dummyItem = new TestPoco()
                        {
                            Id   = 1,
                            Name = "Dummy"
                        };
                        context.Tests.Add(dummyItem);
                        context.SaveChanges();
                    }
                }
            }
        }