/// <summary> /// 生成 value 对应的 SQL 片断 /// </summary> /// <param name="value">SQL值</param> /// <param name="token">解析SQL命令上下文</param> /// <param name="m">value 对应的成员</param> /// <returns></returns> public string GetSqlValue(object value, ITranslateContext token, MemberVisitedStack.VisitedMember m) { ColumnAttribute column = m != null?TypeUtils.GetColumnAttribute(m.Member, m.ReflectedType) : null; return(this.GetSqlValue(value, token, column)); }
/// <summary> /// 生成 value 对应的 SQL 片断 /// <para>因为会使用到默认值,故此重载仅限 INSERT / UPDATE 时使用</para> /// </summary> /// <param name="value">SQL值</param> /// <param name="context">解析SQL命令时的参数上下文</param> /// <param name="column">数据列特性</param> /// <returns></returns> public string GetSqlValueWidthDefault(object value, ITranslateContext context, ColumnAttribute column) { if (value == null && column != null && column.Default != null) { // 插入值为空时使用默认值 return(column.Default.ToString()); } if (value != null && column != null && column.Default != null) { // 值不为空,但只有.net默认值时也使用数据库默认值 Type t = value.GetType(); bool useDefault = false; if (t == typeof(DateTime) && (((DateTime)value) == DateTime.MinValue || ((DateTime)value).ToString("yyyy-MM-dd") == "0001-01-01")) { useDefault = true; } // 插入值为空时使用默认值 if (useDefault) { return(column.Default.ToString()); } } return(this.GetSqlValue(value, context, column)); }
/// <summary> /// 获取成员对应的数据库字段名称 /// </summary> /// <param name="memberName">实体成员名称(字段/属性)</param> /// <returns></returns> public string GetFieldName(string memberName) { ColumnAttribute column = this.GetMemberAttribute <ColumnAttribute>(memberName); return(column != null && !string.IsNullOrEmpty(column.Name) ? column.Name : memberName); }