private object CheckKey(FieldDescribe _FieldDescribe, object Value) { var _Identity = _FieldDescribe.IsIdentity; var _FieldType = _FieldDescribe.Type; if ((_FieldType == typeof(Guid) || _FieldType == typeof(Guid?))) { if (Value == null || Guid.Parse(Value.ToString()) == Guid.Empty) { return(Guid.NewGuid()); } return(Value); } return(Value); }
public override SQL ToSql(out object Id) { var _Cols = new List <string>(); var _Values = new List <string>(); object _KeyId = null; var _Table = _TableInfo.Item2; var _KeyInfo = _Table.FirstOrDefault(w => w.IsKey); this._KeyFieldDescribe = _KeyInfo; var _TableName = _TableInfo.Item1; var TableName = DbSettings.KeywordHandle(_TableName); var _SetStr = new List <string>(); //加入忽略字段 两个集合合并 IgnoreColumns = IgnoreColumns.Union(_Table.Where(w => w.IsIgnore).Select(w => w.Name).ToList()).ToList(); foreach (MemberAssignment item in memberInitExpression.Bindings) { var _MemberName = item.Member.Name; var _Name = item.Member.Name; //检测有无忽略字段 if (IgnoreColumns.Any(w => w == _MemberName)) { continue; } var _FieldInfo = _Table.Find(w => w.Name == _MemberName); if (_FieldInfo != null) { _Name = _FieldInfo.TableFieldName; } var _Val = Parser.Eval(item.Expression); if (_KeyInfo != null && _KeyInfo?.Name == _MemberName) { //如果主键自增 if (_KeyInfo.IsIdentity) { if (this._Analysis._DbContextType == DbContextType.Oracle) { _Val = "MY_SEQ.NEXTVAL";//MY_SEQ.NEXTVAL } else if (this._Analysis._DbContextType == DbContextType.PostgreSQL) { LastInsertId = LastInsertId.Replace("#ID#", _Name); } else { continue; } } else { _KeyId = this.CheckKey(_KeyInfo, _Val); _Val = _KeyId; } } var _Count = Sql.Parameter.Count; _Cols.Add(_Name); _Values.Add("@" + _Name + "_" + _Count); Sql.Parameter.Add(new DbParam() { ParameterName = "@" + _Name + "_" + _Count, Value = _Val }); } //检查是否有key if (_KeyInfo != null && !memberInitExpression.Bindings.Any(w => w.Member.Name == _KeyInfo?.Name)) { bool _IsContinue = false; object _Val = null; //如果主键自增 if (_KeyInfo.IsIdentity) { if (this._Analysis._DbContextType == DbContextType.Oracle) { _Val = "MY_SEQ.NEXTVAL";//MY_SEQ.NEXTVAL } else if (this._Analysis._DbContextType == DbContextType.PostgreSQL) { LastInsertId = LastInsertId.Replace("#ID#", _KeyInfo.TableFieldName); } else { _IsContinue = true; } } else { _KeyId = this.CheckKey(_KeyInfo, _Val); _Val = _KeyId; } if (!_IsContinue) { var _Count = Sql.Parameter.Count; _Cols.Add(_KeyInfo.TableFieldName); _Values.Add("@" + _KeyInfo.TableFieldName + "_" + _Count); Sql.Parameter.Add(new DbParam() { ParameterName = "@" + _KeyInfo.TableFieldName + "_" + _Count, Value = _Val }); } } this.Sql.Code.Append($"INSERT INTO {TableName} ({string.Join(",", _Cols)}) VALUES ({ string.Join(",", _Values)}) {LastInsertId} ;"); Id = _KeyId; return(this.Sql); }