private string GetDbTypeCode() { StringBuilder code = new StringBuilder(); var columns = Entity.Properties; foreach (var field in columns) { code.AppendFormat(@" case ""{0}"": return DbType.{1};" , field.PropertyName , SQLiteDefault.ToDbType(field.CsType)); } return(string.Format(@" /// <summary> /// 得到字段的DbType类型 /// </summary> /// <param name=""field"">字段名称</param> /// <returns>参数</returns> protected sealed override DbType GetDbType(string field) {{ switch (field) {{{0} }} return DbType.String; }}", code)); }
private string LoadEntityCode() { StringBuilder sql = new StringBuilder(); sql.AppendFormat(@" /// <summary> /// 载入数据 /// </summary> /// <param name=""reader"">数据读取器</param> /// <param name=""entity"">读取数据的实体</param> protected sealed override void LoadEntity(SQLiteDataReader reader,{0} entity) {{ using (new EditScope(entity.Status, EditArrestMode.All, false)) {{" , this.Entity.EntityName); int idx = 0; foreach (var field in Entity.Properties) { sql.AppendFormat(@" if (!reader.IsDBNull({2})) entity.{0} = {1}({2});" , field.PropertyName , SQLiteDefault.GetDBReaderFunctionName(field.CsType), idx++); if (field.Nullable) { sql.AppendFormat(@" else entity.{0} = null;" , field.PropertyName); } else { sql.AppendFormat(@" else entity.{0} = default({1});" , field.PropertyName , field.CsType); } } sql.Append(@" } }"); return(sql.ToString()); }
private string UpdateCode() { var pk = Entity.PrimaryColumn; return(string.Format(@" /// <summary> /// 设置更新数据的命令 /// </summary> /// <param name=""entity"">实体对象</param> /// <param name=""cmd"">命令</param> protected sealed override void SetUpdateCommand({0} entity, SQLiteCommand cmd) {{ StringBuilder sql = new StringBuilder(); cmd.Parameters.Add(new SQLiteParameter(""{2}"", DbType.{3}){{ Value = entity.{2}}}); bool isFirst = true; foreach (var field in entity.Status.ModifiedProperties) {{ if(field == ""{2}"") continue; cmd.Parameters.Add(new SQLiteParameter(field, GetDbType(field)){{ Value = entity.GetValue(field)}}); if (isFirst) {{ isFirst = false; }} else {{ sql.Append("",""); }} sql.AppendFormat(@"" {{0}} = ${{0}}"", field); }} cmd.CommandText = string.Format(@"" UPDATE [{1}] SET {{0}} WHERE {2} = ${2};"",sql); }}" , this.Entity.EntityName , this.Entity.SaveTable , pk.PropertyName , SQLiteDefault.ToDbType(pk.CsType))); }
private string InsertCode() { StringBuilder code = new StringBuilder(); code.AppendFormat(@" /// <summary> /// 设置插入数据的命令 /// </summary> /// <param name=""entity"">实体对象</param> /// <param name=""cmd"">命令</param> /// <returns>返回真说明要取主键</returns> protected sealed override bool SetInsertCommand({0} entity, SQLiteCommand cmd) {{ cmd.CommandText = InsertSql;", this.Entity.EntityName); var columns = Entity.Properties.Where(p => !p.IsCompute && !p.IsIdentity); foreach (var field in columns) { code.AppendFormat(@" cmd.Parameters.Add(new SQLiteParameter(""{0}"",DbType.{1}){{ Value = entity.{0}}});" , field.PropertyName , SQLiteDefault.ToDbType(field.CsType)); } if (this.Entity.PrimaryColumn.IsIdentity) { code.Append(@" return true; }"); } else { code.Append(@" return false; }"); } return(code.ToString()); }
private string TableSql(TableSchema schema) { StringBuilder sql = new StringBuilder(); sql.AppendFormat(@" CREATE TABLE [{0}](", schema.TableName); bool isFirst = true; var pk = schema.PrimaryColumn; if (pk != null) { sql.AppendLine(); isFirst = false; sql.AppendFormat(@" [{0}]", pk.PropertyName); if (pk.IsIdentity) { sql.Append(" INTEGER PRIMARY KEY AUTOINCREMENT"); } else { sql.AppendFormat("{0} NOT NULL PRIMARY KEY", SQLiteDefault.ToDataBaseType(pk.PropertyType.Type)); } } foreach (var field in schema.ColumnSchemas.Where(p => p.PropertyType != null && !p.IsPrimaryKey)) { if (isFirst) { sql.AppendLine(); isFirst = false; } else { sql.AppendLine(","); } sql.AppendFormat(@" [{0}] {1}", field.PropertyName, SQLiteDefault.ToDataBaseType(field.PropertyType.Type)); if (!field.PropertyType.Nullable) { switch (field.PropertyType.Type.ToLower()) { case "string": case "Binary": case "byte[]": break; default: sql.Append(" NOT NULL"); break; } } } sql.AppendLine(); sql.Append(")"); return(string.Format(@" /// <summary> /// {0}的结构语句 /// </summary> private TableSql _{1}Sql = new TableSql {{ TableName = ""{1}"", PimaryKey = ""{2}"", CreateSql = @""{3}"", }};", schema.Description, schema.TableName, schema.PrimaryColumn.PropertyName, sql)); }