public Person DbGetByIdOrDefault(Int32 id, IWormDbConnection db) { var query = db.CreateQuery(); query.Sql = "select * from `persons` where `Id`=@id"; query.AddParam("@id", id); IWormDataReader reader = query.ExecuteReader(); while (reader.Read()) { this.Populate(reader); return this; } return default(Person); }
public Person DbSave(IWormDbConnection db) { if (this.DbIsNew()) { return this.DbInsert(db); } return this.DbUpdate(db); }
private Person DbUpdate(IWormDbConnection db) { var query = db.CreateQuery(); var columns = new List<string>(); if (this.hasChanged_Name) { columns.Add("`Name`=@Name"); query.AddParam("@Name", base.Name); } if (this.hasChanged_Age) { columns.Add("`age_in_years`=@Age"); query.AddParam("@Age", base.Age); } if (this.hasChanged_Role) { columns.Add("`Role`=@Role"); query.AddParam("@Role", base.Role); } if (this.hasChanged_InternalState) { columns.Add("`InternalState`=@InternalState"); query.AddParam("@InternalState", base.InternalState); } if (columns.Count == 0) { // nothing has changed... no reason to bother the server return this; } query.Sql = String.Format("update `persons` set {0} where `Id`=@id limit 1", String.Join(", ", columns)); query.AddParam("@id", base.Id); query.ExecuteNonQuery(); this.hasChanged_Name = false; this.hasChanged_Age = false; this.hasChanged_Role = false; this.hasChanged_InternalState = false; return this; }
private Person DbInsert(IWormDbConnection db) { var query = db.CreateQuery(); query.Sql = @"insert into `persons` set `Name` = @Name `age_in_years` = @Age `Role` = @Role `InternalState` = @InternalState "; query.AddParam("@Name", base.Name); query.AddParam("@Age", base.Age); query.AddParam("@Role", base.Role); query.AddParam("@InternalState", base.InternalState); if (query.ExecuteNonQuery() != 1) { throw new WormException("No rows were inserted"); } query = db.CreateQuery("select last_insert_id()"); base.Id = Int32.Parse(query.ExecuteScalar<ulong>().ToString()); this.hasChanged_Name = false; this.hasChanged_Age = false; this.hasChanged_Role = false; this.hasChanged_InternalState = false; return this; }