/// <summary> /// 创建索引脚本 /// </summary> /// <param name="filed"></param> /// <returns></returns> public override string GetColumnIndexScript(Attribute.FieldAttribute filed) { string indexName = string.Format("pk_{0}_{1}", filed.TableName, filed.Name); string indexScript = string.Format("create {3} index {0} on {1}({2}); ", indexName, filed.TableName, filed.KeyWordName, filed.FieldIndexType == Attribute.FieldIndexType.非聚集唯一 ? "UNIQUE" : ""); return(indexScript); }
/// <summary> /// 获取插入语法 /// </summary> /// <param name="obj"></param> /// <returns></returns> public override object InsertObject(DbContext dbContext, IModel obj) { var helper = dbContext.DBHelper; Type type = obj.GetType(); string table = TypeCache.GetTableName(type, dbContext); var typeArry = TypeCache.GetProperties(type, true).Values; Attribute.FieldAttribute primaryKey = null; string sql = string.Format("insert into `{0}`(", table); string sql1 = ""; string sql2 = ""; foreach (Attribute.FieldAttribute info in typeArry) { //if (info.FieldType != Attribute.FieldType.数据库字段) //{ // continue; //} string name = info.MapingName; if (info.IsPrimaryKey) { primaryKey = info; } if (info.IsPrimaryKey && !info.KeepIdentity) { continue; } //if (!string.IsNullOrEmpty(info.VirtualField)) //{ // continue; //} object value = info.GetValue(obj); if (info.PropertyType.FullName.StartsWith("System.Nullable"))//Nullable<T>类型为空值不插入 { if (value == null) { continue; } } value = ObjectConvert.CheckNullValue(value, info.PropertyType); sql1 += string.Format("{0},", FieldNameFormat(info)); sql2 += string.Format("?{0},", name); helper.AddParam(name, value); } sql1 = sql1.Substring(0, sql1.Length - 1); sql2 = sql2.Substring(0, sql2.Length - 1); sql += sql1 + ") values( " + sql2 + ") ; "; sql = SqlFormat(sql); if (primaryKey.KeepIdentity) { helper.Execute(sql); return(primaryKey.GetValue(obj)); } else { sql += "SELECT LAST_INSERT_ID();"; return(SqlStopWatch.ExecScalar(helper, sql)); } }
public string FieldNameFormat(Attribute.FieldAttribute field) { if (string.IsNullOrEmpty(field.MapingNameFormat)) { field.MapingNameFormat = KeyWordFormat(field.MapingName); } return(field.MapingNameFormat); }
public override string FieldNameFormat(Attribute.FieldAttribute field) { if (string.IsNullOrEmpty(field.MapingNameFormat)) { return(field.MapingName); } return(field.MapingNameFormat); }
/// <summary> /// 获取插入语法 /// </summary> /// <param name="obj"></param> /// <returns></returns> public override int InsertObject(IModel obj) { Type type = obj.GetType(); string table = TypeCache.GetTableName(type, dbContext); var typeArry = TypeCache.GetProperties(type, true).Values; Attribute.FieldAttribute primaryKey = null; string sql = string.Format("insert into [{0}](", table); string sql1 = ""; string sql2 = ""; foreach (Attribute.FieldAttribute info in typeArry) { string name = info.Name; if (info.IsPrimaryKey) { primaryKey = info; } if (info.IsPrimaryKey && !info.KeepIdentity) { continue; } if (!string.IsNullOrEmpty(info.VirtualField)) { continue; } object value = info.GetValue(obj); if (info.PropertyType.FullName.StartsWith("System.Nullable"))//Nullable<T>类型为空值不插入 { if (value == null) { continue; } } value = ObjectConvert.SetNullValue(value, info.PropertyType); sql1 += string.Format("{0},", info.KeyWordName); sql2 += string.Format("@{0},", name); helper.AddParam(name, value); } sql1 = sql1.Substring(0, sql1.Length - 1); sql2 = sql2.Substring(0, sql2.Length - 1); sql += sql1 + ") values( " + sql2 + ") ; "; if (primaryKey.KeepIdentity) { sql += "SELECT " + primaryKey.GetValue(obj) + ";"; } else { sql += "SELECT scope_identity() ;"; } sql = SqlFormat(sql); return(Convert.ToInt32(helper.ExecScalar(sql))); }
/// <summary> /// 创建索引脚本 /// </summary> /// <param name="filed"></param> /// <returns></returns> public override string GetColumnIndexScript(Attribute.FieldAttribute filed) { if (filed.IsPrimaryKey) { return(""); //mssql不能用语句设为自增 //return string.Format("alter table [{0}] add constraint PK{0} primary key ([{0}])", filed.TableName, filed.MapingName); } string indexScript = string.Format("CREATE {2} NONCLUSTERED INDEX IX_INDEX_{0}_{1} ON dbo.[{0}]([{1}])", filed.TableName, filed.MapingName, filed.FieldIndexType == Attribute.FieldIndexType.非聚集唯一 ? "UNIQUE" : ""); return(indexScript); }
/// <summary> /// 获取列类型和默认值 /// </summary> /// <param name="info"></param> /// <param name="defaultValue"></param> /// <returns></returns> public override string GetColumnType(Attribute.FieldAttribute info, out string defaultValue) { Type propertyType = info.PropertyType; //Dictionary<Type, string> dic = GetFieldMaping(); defaultValue = info.DefaultValue; //int默认值 if (string.IsNullOrEmpty(defaultValue)) { if (!info.IsPrimaryKey && propertyType == typeof(System.Int32)) { defaultValue = "0"; } //datetime默认值 if (propertyType == typeof(System.DateTime)) { defaultValue = " CURRENT_TIMESTAMP"; } } string columnType; columnType = GetDBColumnType(propertyType); //超过3000设为ntext if (propertyType == typeof(System.String) && info.Length > 3000) { columnType = "varchar(max)"; } if (info.Length > 0) { columnType = string.Format(columnType, info.Length); } if (info.IsPrimaryKey) { if (info.KeepIdentity) { columnType = " " + columnType + " primary key"; } else { //todo 只有数值型才能自增 columnType = " " + columnType + " primary key auto_increment"; } } if (!string.IsNullOrEmpty(info.ColumnType)) { columnType = info.ColumnType; } return(columnType); }
/// <summary> /// 获取列类型和默认值 /// </summary> /// <param name="info"></param> /// <param name="defaultValue"></param> /// <returns></returns> public override string GetColumnType(Attribute.FieldAttribute info, out string defaultValue) { Type propertyType = info.PropertyType; Dictionary <Type, string> dic = GetFieldMapping(); defaultValue = info.DefaultValue; //int默认值 if (string.IsNullOrEmpty(defaultValue)) { if (!info.IsPrimaryKey && propertyType == typeof(System.Int32)) { defaultValue = "(0)"; } //datetime默认值 if (propertyType == typeof(System.DateTime)) { defaultValue = "(getdate())"; } } string columnType; if (propertyType.FullName.IndexOf("System.") > -1) { columnType = dic[propertyType]; } else { propertyType = info.PropertyType.BaseType; columnType = dic[propertyType]; } //超过3000设为ntext if (propertyType == typeof(System.String) && info.Length > 3000) { columnType = "ntext"; } if (info.Length > 0) { columnType = string.Format(columnType, info.Length); } if (info.IsPrimaryKey) { columnType = "int IDENTITY(1,1) NOT NULL"; } if (!string.IsNullOrEmpty(info.ColumnType)) { columnType = info.ColumnType; } return(columnType); }
/// <summary> /// 获取列类型和默认值 /// </summary> /// <param name="info"></param> /// <param name="defaultValue"></param> /// <returns></returns> public override string GetColumnType(Attribute.FieldAttribute info, out string defaultValue) { Type propertyType = info.PropertyType; //Dictionary<Type, string> dic = GetFieldMaping(); defaultValue = info.DefaultValue; //int默认值 if (string.IsNullOrEmpty(defaultValue)) { if (!info.IsPrimaryKey && propertyType == typeof(System.Int32)) { defaultValue = "(0)"; } //datetime默认值 if (propertyType == typeof(System.DateTime)) { defaultValue = "(getdate())"; } } string columnType; columnType = GetDBColumnType(propertyType); //超过3000设为ntext if (propertyType == typeof(System.String) && info.Length > 3000) { columnType = "ntext"; } if (info.Length > 0) { columnType = string.Format(columnType, info.Length); } if (info.IsPrimaryKey) { if (info.KeepIdentity) { columnType = columnType + " "; } else { //todo 只有数值型才能自增 columnType = columnType + " IDENTITY(1,1) "; } } if (!string.IsNullOrEmpty(info.ColumnType)) { columnType = info.ColumnType; } return(columnType); }
/// <summary> /// 获取列类型和默认值 /// </summary> /// <param name="info"></param> /// <param name="defaultValue"></param> /// <returns></returns> public override string GetColumnType(Attribute.FieldAttribute info, out string defaultValue) { Type propertyType = info.PropertyType; Dictionary <Type, string> dic = GetFieldMapping(); defaultValue = info.DefaultValue; //int默认值 if (string.IsNullOrEmpty(defaultValue)) { if (!info.IsPrimaryKey && propertyType == typeof(System.Int32)) { defaultValue = "0"; } //datetime默认值 if (propertyType == typeof(System.DateTime)) { defaultValue = " CURRENT_TIMESTAMP"; } } string columnType; if (propertyType.FullName.IndexOf("System.") > -1) { columnType = dic[propertyType]; } else { propertyType = info.PropertyType.BaseType; columnType = dic[propertyType]; } //超过3000设为ntext if (propertyType == typeof(System.String) && info.Length > 3000) { columnType = "varchar(8000)"; } if (info.Length > 0) { columnType = string.Format(columnType, info.Length); } if (info.IsPrimaryKey) { columnType = "int primary key not null auto_increment"; } if (!string.IsNullOrEmpty(info.ColumnType)) { columnType = info.ColumnType; } return(columnType); }
/// <summary> /// 创建字段脚本 /// </summary> /// <param name="field"></param> /// <returns></returns> public override string GetCreateColumnScript(Attribute.FieldAttribute field) { string str = string.Format("alter table {0} add {1} {2};", field.TableName, field.KeyWordName, field.ColumnType); if (!string.IsNullOrEmpty(field.DefaultValue)) { str += string.Format(" default '{0}' ", field.DefaultValue); } if (field.NotNull) { str += " not null"; } return(str); }
/// <summary> /// 创建索引脚本 /// </summary> /// <param name="filed"></param> /// <returns></returns> public override string GetColumnIndexScript(Attribute.FieldAttribute filed) { // ALTER TABLE table_name ADD INDEX index_name (column_list) //ALTER TABLE table_name ADD UNIQUE(column_list) //ALTER TABLE table_name ADD PRIMARY KEY(column_list) if (filed.IsPrimaryKey) { return(""); return(string.Format("ALTER TABLE `{0}` modify `{1}` int auto_increment", filed.TableName, filed.MapingName)); } string indexScript = string.Format("ALTER TABLE `{0}` ADD {2} ({1}) ", filed.TableName, filed.MapingName, filed.FieldIndexType == Attribute.FieldIndexType.非聚集唯一 ? "UNIQUE" : "INDEX index_" + filed.MapingName); return(indexScript); }
/// <summary> /// 获取列类型和默认值 /// </summary> /// <param name="info"></param> /// <param name="defaultValue"></param> /// <returns></returns> public override string GetColumnType(Attribute.FieldAttribute info, out string defaultValue) { Type propertyType = info.PropertyType; //Dictionary<Type, string> dic = GetFieldMaping(); defaultValue = info.DefaultValue; //int默认值 if (string.IsNullOrEmpty(defaultValue)) { if (!info.IsPrimaryKey && propertyType == typeof(System.Int32)) { defaultValue = "0"; } //datetime默认值 if (propertyType == typeof(System.DateTime)) { defaultValue = "TIMESTAMP"; } } string columnType; columnType = GetDBColumnType(propertyType); //超过3000设为ntext if (propertyType == typeof(System.String) && info.Length > 3000) { columnType = "CLOB"; } if (info.Length > 0) { columnType = string.Format(columnType, info.Length); } //if (info.IsPrimaryKey) //{ // columnType = "NUMBER(4) Not Null Primary Key"; //} if (info.IsPrimaryKey) { columnType = " " + columnType + " Primary Key "; } if (!string.IsNullOrEmpty(info.ColumnType)) { columnType = info.ColumnType; } return(columnType); }
/// <summary> /// 解析选择的字段 /// </summary> /// <param name="isSelect">查询字段时按属性名生成别名</param> /// <param name="expressionBody"></param> /// <param name="withTablePrefix">是否生按表生成前辍,关联时用 如Table__Name</param> /// <param name="types"></param> /// <returns></returns> internal SelectFieldInfo GetSelectField(bool isSelect, Expression expressionBody, bool withTablePrefix, params Type[] types) { var allFields = new Dictionary <Type, IgnoreCaseDictionary <Attribute.FieldAttribute> >(); allFields.Add(__MainType, TypeCache.GetProperties(__MainType, true)); foreach (var t in types) { if (!allFields.ContainsKey(t)) { allFields.Add(t, TypeCache.GetProperties(t, true)); } } if (expressionBody is ParameterExpression)//选择所有字段 { var resultFields = new List <Attribute.FieldMapping>(); foreach (var item in allFields[expressionBody.Type].Values) { var item2 = item.GetFieldMapping(__DBAdapter, GetPrefix(item.ModelType), false, ""); resultFields.Add(item2); } var selectFieldItem = new SelectFieldInfo(resultFields); return(selectFieldItem); } else if (expressionBody is NewExpression)//按匿名对象 { var resultFields = new List <Attribute.FieldMapping>(); #region 匿名对象 var newExpression = expressionBody as NewExpression; for (int i = 0; i < newExpression.Arguments.Count(); i++) { var item = newExpression.Arguments[i]; var memberName = newExpression.Members[i].Name; if (item is MethodCallExpression)//group用 { var methodCallExpression = item as MethodCallExpression; string methodMember; var methodQuery = getSelectMethodCall(methodCallExpression, out methodMember, i); var f = new Attribute.FieldAttribute() { ModelType = __MainType, MemberName = memberName, PropertyType = item.Type }; var f2 = f.GetFieldMapping(__DBAdapter, "", withTablePrefix, memberName, methodQuery); f2.MethodName = methodCallExpression.Method.Name; resultFields.Add(f2); } else if (item is BinaryExpression) { var field = getSeletctBinary(item); var f = new Attribute.FieldAttribute() { ModelType = __MainType, MemberName = "", PropertyType = item.Type }; var f2 = f.GetFieldMapping(__DBAdapter, "", withTablePrefix, memberName, field); resultFields.Add(f2); } else if (item is ConstantExpression)//常量 { var constantExpression = item as ConstantExpression; var f = new Attribute.FieldAttribute() { ModelType = __MainType, MemberName = "", PropertyType = item.Type }; var value = constantExpression.Value + ""; if (!value.IsNumber()) { value = string.Format("'{0}'", value); } var f2 = f.GetFieldMapping(__DBAdapter, "", withTablePrefix, memberName, value); //f.FieldQuery = new Attribute.FieldQuery() { MemberName = memberName, FieldName = value, MethodName = "" }; resultFields.Add(f2); } else if (item is MemberExpression) { var memberExpression = item as MemberExpression;//转换为属性访问表达式 if (memberExpression.Expression.NodeType == ExpressionType.Constant) { string parName = __DBAdapter.GetParamName("p", i); //newExpressionParame.Add(parName, i); var obj = ConstantValueVisitor.GetParameExpressionValue(item); var f2 = new Attribute.FieldAttribute() { ModelType = __MainType, PropertyType = item.Type }; var f3 = f2.GetFieldMapping(__DBAdapter, "", withTablePrefix, memberName, parName); //f2.FieldQuery = new Attribute.FieldQuery() { MemberName = memberName, FieldName = parName, MethodName = "" }; resultFields.Add(f3); __Visitor.AddParame(parName, obj); continue; } else if (memberExpression.Member.ReflectedType.Name.StartsWith("<>f__AnonymousType")) { //按匿名对象属性,视图关联时用 var f2 = new Attribute.FieldAttribute() { MemberName = memberExpression.Member.Name, PropertyType = item.Type }; var f3 = f2.GetFieldMapping(__DBAdapter, GetPrefix(memberExpression.Expression.Type), withTablePrefix, memberName); resultFields.Add(f3); continue; } //按属性 Attribute.FieldAttribute f; var a2 = allFields[memberExpression.Expression.Type].TryGetValue(memberExpression.Member.Name, out f); if (!a2) { throw new CRLException("找不到可筛选的属性" + memberExpression.Member.Name + " 在" + memberExpression.Expression.Type); } Attribute.FieldMapping _f2; if (memberName != memberExpression.Member.Name)//按有别名算 { _f2 = f.GetFieldMapping(__DBAdapter, GetPrefix(f.ModelType), withTablePrefix, memberName); } else { //字段名和属性名不一样时才生成别名 //todo 属性别名不一样时,查询应返回属性名 string fieldName = ""; if (isSelect)//查询字段时按属性名生成别名 { if (!string.IsNullOrEmpty(f.MapingName)) { fieldName = f.MemberName; } } _f2 = f.GetFieldMapping(__DBAdapter, GetPrefix(f.ModelType), withTablePrefix, fieldName); } //f.FieldQuery = new Attribute.FieldQuery() { MemberName = memberName, FieldName = f.MapingName, MethodName = "" }; resultFields.Add(_f2); } else { throw new CRLException("不支持此语法解析:" + item); } } #endregion var selectFieldItem = new SelectFieldInfo(resultFields); return(selectFieldItem); } else if (expressionBody is MethodCallExpression) { #region 方法 var method = expressionBody as MethodCallExpression; var f = new Attribute.FieldAttribute() { ModelType = __MainType, MemberName = "", PropertyType = expressionBody.Type }; string methodMember; var methodQuery = getSelectMethodCall(expressionBody, out methodMember, 0); var f2 = f.GetFieldMapping(__DBAdapter, "", withTablePrefix, "", methodQuery); f2.MethodName = method.Method.Name; #endregion var selectFieldItem = new SelectFieldInfo(f2); return(selectFieldItem); } else if (expressionBody is BinaryExpression) { var field = getSeletctBinary(expressionBody); var f = new Attribute.FieldAttribute() { ModelType = __MainType, MemberName = "", PropertyType = expressionBody.Type }; var f2 = f.GetFieldMapping(__DBAdapter, "", withTablePrefix, "", field); var selectFieldItem = new SelectFieldInfo(f2); return(selectFieldItem); } else if (expressionBody is ConstantExpression) { var constant = (ConstantExpression)expressionBody; var f = new Attribute.FieldAttribute() { ModelType = __MainType, MemberName = "", PropertyType = expressionBody.Type }; var f2 = f.GetFieldMapping(__DBAdapter, "", withTablePrefix, "", constant.Value + ""); var selectFieldItem = new SelectFieldInfo(f2); return(selectFieldItem); } else if (expressionBody is UnaryExpression) { var unaryExpression = expressionBody as UnaryExpression; return(GetSelectField(false, unaryExpression.Operand, withTablePrefix, types)); } else if (expressionBody is MemberExpression)//按成员 { #region MemberExpression var mExp = (MemberExpression)expressionBody; if (mExp.Expression.Type.BaseType == typeof(object)) { //按匿名对象属性,视图关联时用 var _f = new Attribute.FieldAttribute() { MemberName = mExp.Member.Name, PropertyType = mExp.Type }; var f3 = _f.GetFieldMapping(__DBAdapter, GetPrefix(mExp.Expression.Type), withTablePrefix, mExp.Member.Name); return(new SelectFieldInfo(f3)); } CRL.Attribute.FieldAttribute f; var a = allFields[mExp.Expression.Type].TryGetValue(mExp.Member.Name, out f); if (!a) { throw new CRLException("找不到可筛选的属性" + mExp.Member.Name + " 在" + mExp.Expression.Type); } var f2 = f.GetFieldMapping(__DBAdapter, GetPrefix(f.ModelType), withTablePrefix, ""); return(new SelectFieldInfo(f2)); #endregion } else { throw new CRLException("不支持此语法解析:" + expressionBody); } }
/// <summary> /// 创建索引脚本 /// </summary> /// <param name="filed"></param> /// <returns></returns> public override string GetColumnIndexScript(Attribute.FieldAttribute filed) { string indexScript = string.Format("CREATE {2} NONCLUSTERED INDEX IX_INDEX_{0}_{1} ON dbo.[{0}]([{1}])", filed.TableName, filed.Name, filed.FieldIndexType == Attribute.FieldIndexType.非聚集唯一 ? "UNIQUE" : ""); return(indexScript); }
/// <summary> /// 解析选择的字段 /// </summary> /// <param name="isSelect">查询字段时按属性名生成别名</param> /// <param name="expressionBody"></param> /// <param name="withTablePrefix">是否生按表生成前辍,关联时用 如Table__Name</param> /// <param name="types"></param> /// <returns></returns> internal List <Attribute.FieldAttribute> GetSelectField(bool isSelect, Expression expressionBody, bool withTablePrefix, params Type[] types) { var allFilds = new Dictionary <Type, IgnoreCaseDictionary <Attribute.FieldAttribute> >(); allFilds.Add(__MainType, TypeCache.GetProperties(__MainType, true)); foreach (var t in types) { if (!allFilds.ContainsKey(t)) { allFilds.Add(t, TypeCache.GetProperties(t, true)); } } List <Attribute.FieldAttribute> resultFields = new List <Attribute.FieldAttribute>(); if (expressionBody is NewExpression)//按匿名对象 { #region 匿名对象 var newExpression = expressionBody as NewExpression; for (int i = 0; i < newExpression.Arguments.Count(); i++) { var item = newExpression.Arguments[i]; var memberName = newExpression.Members[i].Name; if (item is MethodCallExpression)//group用 { var methodCallExpression = item as MethodCallExpression; string methodMember; var methodQuery = getSelectMethodCall(methodCallExpression, out methodMember); var f = new Attribute.FieldAttribute() { ModelType = __MainType }; f.SetFieldQueryScript2(__DBAdapter, "", withTablePrefix, memberName, methodQuery); f.FieldQuery = new Attribute.FieldQuery() { MemberName = memberName, FieldName = methodMember, MethodName = methodCallExpression.Method.Name }; resultFields.Add(f); } else if (item is BinaryExpression) { var field = getSeletctBinary(item); var f = new Attribute.FieldAttribute() { ModelType = __MainType }; f.SetFieldQueryScript2(__DBAdapter, "", withTablePrefix, memberName, field); f.FieldQuery = new Attribute.FieldQuery() { MemberName = memberName, FieldName = field, MethodName = "" }; resultFields.Add(f); } else if (item is ConstantExpression)//常量 { var constantExpression = item as ConstantExpression; var f = new Attribute.FieldAttribute() { ModelType = __MainType }; var value = constantExpression.Value + ""; if (!value.IsNumber()) { value = string.Format("'{0}'", value); } f.SetFieldQueryScript2(__DBAdapter, "", withTablePrefix, memberName, value); f.FieldQuery = new Attribute.FieldQuery() { MemberName = memberName, FieldName = value, MethodName = "" }; resultFields.Add(f); } else if (item is MemberExpression) { var memberExpression = item as MemberExpression;//转换为属性访问表达式 if (memberExpression.Expression.Type.BaseType == typeof(object)) { //按匿名对象属性,视图关联时用 var f2 = new Attribute.FieldAttribute() { MemberName = memberExpression.Member.Name }; f2.SetFieldQueryScript2(__DBAdapter, GetPrefix(memberExpression.Expression.Type), withTablePrefix, memberName); resultFields.Add(f2); continue; } if (!allFilds[memberExpression.Expression.Type].ContainsKey(memberExpression.Member.Name)) { throw new CRLException("找不到可筛选的属性" + memberExpression.Member.Name + " 在" + memberExpression.Expression.Type); } var f = allFilds[memberExpression.Expression.Type][memberExpression.Member.Name].Clone(); if (memberName != memberExpression.Member.Name)//按有别名算 { f.SetFieldQueryScript2(__DBAdapter, GetPrefix(f.ModelType), withTablePrefix, memberName); } else { //字段名和属性名不一样时才生成别名 //todo 属性别名不一样时,查询应返回属性名 string fieldName = ""; if (isSelect)//查询字段时按属性名生成别名 { if (!string.IsNullOrEmpty(f.MapingName)) { fieldName = f.MemberName; } } f.SetFieldQueryScript2(__DBAdapter, GetPrefix(f.ModelType), withTablePrefix, fieldName); } f.FieldQuery = new Attribute.FieldQuery() { MemberName = memberName, FieldName = f.MapingName, MethodName = "" }; resultFields.Add(f); } else { throw new CRLException("不支持此语法解析:" + item); } } #endregion } else if (expressionBody is MethodCallExpression) { #region 方法 var method = expressionBody as MethodCallExpression; var f = new Attribute.FieldAttribute() { ModelType = __MainType }; string methodMember; var methodQuery = getSelectMethodCall(expressionBody, out methodMember); f.SetFieldQueryScript2(__DBAdapter, "", withTablePrefix, "", methodQuery); f.FieldQuery = new Attribute.FieldQuery() { MemberName = methodMember, FieldName = methodMember, MethodName = method.Method.Name }; resultFields.Add(f); #endregion } else if (expressionBody is BinaryExpression) { var field = getSeletctBinary(expressionBody); var f = new Attribute.FieldAttribute() { ModelType = __MainType }; f.SetFieldQueryScript2(__DBAdapter, "", withTablePrefix, "", field); f.FieldQuery = new Attribute.FieldQuery() { MemberName = f.MemberName, FieldName = field, MethodName = "" }; resultFields.Add(f); } else if (expressionBody is ConstantExpression) { var constant = (ConstantExpression)expressionBody; var f = new Attribute.FieldAttribute() { ModelType = __MainType }; f.SetFieldQueryScript2(__DBAdapter, "", withTablePrefix, "", constant.Value + ""); f.FieldQuery = new Attribute.FieldQuery() { MemberName = f.MemberName, FieldName = constant.Value + "", MethodName = "" }; resultFields.Add(f); } else if (expressionBody is UnaryExpression) { var unaryExpression = expressionBody as UnaryExpression; return(GetSelectField(false, unaryExpression.Operand, withTablePrefix, types)); } else if (expressionBody is MemberExpression)//按成员 { var mExp = (MemberExpression)expressionBody; if (mExp.Expression.Type.BaseType == typeof(object)) { //按匿名对象属性,视图关联时用 var f2 = new Attribute.FieldAttribute() { MemberName = mExp.Member.Name }; f2.SetFieldQueryScript2(__DBAdapter, GetPrefix(mExp.Expression.Type), withTablePrefix, mExp.Member.Name); resultFields.Add(f2); return(resultFields);; } if (!allFilds[mExp.Expression.Type].ContainsKey(mExp.Member.Name)) { throw new CRLException("找不到可筛选的属性" + mExp.Member.Name + " 在" + mExp.Expression.Type); } var f = allFilds[mExp.Expression.Type][mExp.Member.Name].Clone(); f.SetFieldQueryScript2(__DBAdapter, GetPrefix(f.ModelType), withTablePrefix, ""); f.FieldQuery = new Attribute.FieldQuery() { MemberName = f.MemberName, FieldName = f.MapingName, MethodName = "" }; resultFields.Add(f); } else { throw new CRLException("不支持此语法解析:" + expressionBody); } return(resultFields); }
public virtual string FieldNameFormat(Attribute.FieldAttribute field) { return(field.MapingName); }
public override string GetCreateColumnScript(Attribute.FieldAttribute field) { throw new NotImplementedException(); }
public override string GetColumnIndexScript(Attribute.FieldAttribute filed) { throw new NotImplementedException(); }
public override string GetColumnType(Attribute.FieldAttribute info, out string defaultValue) { throw new NotImplementedException(); }
/// <summary> /// 创建索引脚本 /// </summary> /// <param name="filed"></param> /// <returns></returns> public override string GetColumnIndexScript(Attribute.FieldAttribute filed) { string indexScript = string.Format("ALTER TABLE `{0}` ADD {2} ({1}) ", filed.TableName, filed.MapingName, filed.FieldIndexType == Attribute.FieldIndexType.非聚集唯一 ? "UNIQUE" : "INDEX index_name"); return(indexScript); }