public void Upsert <T>(T dataClass, string uniqueColmn) { var executer = new DynamicRDBService(this.SqlCreator, this.DataRepository); var dbobjects = new DBobjectConverter().ClassToDBObject(dataClass); dbobjects.First(p => p.ColumnName == uniqueColmn.ToLower()).Unique = true; try { executer.DynamicInsert(dbobjects, dataClass.GetType().Name.ToLower()); } catch (DbException ex) { //本当はもっと厳密にチェックしなくては。。。 executer.Update(dbobjects, dataClass.GetType().Name.ToLower(), dbobjects.FirstOrDefault(p => p.Unique == true)); } }
static void Main(string[] args) { var executer = new DynamicRDBService(new SQLiteCreator(), new SqliteRepository(new SqliteDBConfig().SQLiteConnection())); //var executer = new DynamicRDBService(new PostgreCreator(), new PostgreRepository(new PostgreDBConfig().NpgsqlConnection())); var startupPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);; //Common JObject jObject = ReadJsonFile(Path.Combine(startupPath, "test.json")); var info = CreateInfo(jObject); executer.DynamicInsert(info.Item1, info.Item2); jObject = ReadJsonFile(Path.Combine(startupPath, "test2.json")); info = CreateInfo(jObject); executer.DynamicInsert(info.Item1, info.Item2); //AddColumn jObject = ReadJsonFile(Path.Combine(startupPath, "test3.json")); info = CreateInfo(jObject); executer.DynamicInsert(info.Item1, info.Item2); //xml XmlDocument doc = new XmlDocument(); var str = ReadFile(Path.Combine(startupPath, "test4.xml")); doc.LoadXml(str); string jsonText = JsonConvert.SerializeXmlNode(doc); var jObjectTemp = JObject.Parse(jsonText); jObject = new JObject(); foreach (var j in jObjectTemp["xml"].Children()) { jObject.Add(j); } info = CreateInfo(jObject); executer.DynamicInsert(info.Item1, info.Item2); //Multi jObject = ReadJsonFile(Path.Combine(startupPath, "test5.json")); List <IEnumerable <DBObject> > dBObjects = new List <IEnumerable <DBObject> >(); string dbName = string.Empty; foreach (JObject j in jObject["array"].Children()) { var dbinfo = CreateInfo(j); dBObjects.Add(dbinfo.Item1); dbName = dbinfo.Item2; } executer.DynamicMultiInsert(dBObjects, dbName); //dataclass(便利なRapper) var productData = new ProductData { ProductName = "Magazine", Price = 500, ReleaseDate = DateTime.Now }; new CommonRepository(new SQLiteCreator(), new SqliteRepository(new SqliteDBConfig().SQLiteConnection())).Upsert(productData, nameof(ProductData.ProductName)); }