public KingbaseESOnConflictDoUpdate(IInsert <T1> insert, Expression <Func <T1, object> > columns = null)
        {
            _insert = insert as KingbaseESInsert <T1>;
            if (_insert == null)
            {
                throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.KingbaseES 特有的功能");
            }
            if (_insert._noneParameterFlag == "c")
            {
                _insert._noneParameterFlag = "cu";
            }

            if (columns != null)
            {
                var colsList = new List <ColumnInfo>();
                var cols     = _insert.InternalCommonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, columns?.Body, false, null).ToDictionary(a => a, a => true);
                foreach (var col in _insert.InternalTable.Columns.Values)
                {
                    if (cols.ContainsKey(col.Attribute.Name))
                    {
                        colsList.Add(col);
                    }
                }
                _columns = colsList.ToArray();
            }
            if (_columns == null || _columns.Any() == false)
            {
                _columns = _insert.InternalTable.Primarys;
            }
            if (_columns.Any() == false)
            {
                throw new Exception("OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性");
            }
        }
Exemplo n.º 2
0
        public KingbaseESOnConflictDoUpdate(IInsert <T1> insert, Expression <Func <T1, object> > columns = null)
        {
            _insert = insert as KingbaseESInsert <T1>;
            if (_insert == null)
            {
                throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "KingbaseES"));
            }
            if (_insert._noneParameterFlag == "c")
            {
                _insert._noneParameterFlag = "cu";
            }

            if (columns != null)
            {
                var colsList = new List <ColumnInfo>();
                var cols     = _insert.InternalCommonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, null, columns?.Body, false, null).ToDictionary(a => a, a => true);
                foreach (var col in _insert.InternalTable.Columns.Values)
                {
                    if (cols.ContainsKey(col.Attribute.Name))
                    {
                        colsList.Add(col);
                    }
                }
                _tempPrimarys = colsList.ToArray();
            }
            if (_tempPrimarys == null || _tempPrimarys.Any() == false)
            {
                _tempPrimarys = _insert.InternalTable.Primarys;
            }
            if (_tempPrimarys.Any() == false)
            {
                throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary);
            }
        }