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);
        }