static Query <object> CreateQuery( IDataContext dataContext, EntityDescriptor descriptor, [DisallowNull] T obj, InsertColumnFilter <T>?columnFilter, string?tableName, string?serverName, string?databaseName, string?schemaName, TableOptions tableOptions, Type type) { var sqlTable = new SqlTable(dataContext.MappingSchema, type); if (tableName != null) { sqlTable.PhysicalName = tableName; } if (serverName != null) { sqlTable.Server = serverName; } if (databaseName != null) { sqlTable.Database = databaseName; } if (schemaName != null) { sqlTable.Schema = schemaName; } if (tableOptions.IsSet()) { sqlTable.TableOptions = tableOptions; } var sqlQuery = new SelectQuery(); var insertStatement = new SqlInsertStatement(sqlQuery) { Insert = { Into = sqlTable, WithIdentity = true } }; var ei = new Query <object>(dataContext, null) { Queries = { new QueryInfo { Statement = insertStatement, } } }; foreach (var field in sqlTable.Fields.Where(x => columnFilter == null || columnFilter(obj, x.ColumnDescriptor))) { if (field.IsInsertable && !field.ColumnDescriptor.ShouldSkip(obj !, descriptor, SkipModification.Insert)) { var param = GetParameter(type, dataContext, field); ei.Queries[0].Parameters.Add(param); insertStatement.Insert.Items.Add(new SqlSetExpression(field, param.SqlParameter)); }
static Query <int> CreateQuery( IDataContext dataContext, EntityDescriptor descriptor, T obj, InsertColumnFilter <T>?columnFilter, string?tableName, string?serverName, string?databaseName, string?schemaName, TableOptions tableOptions, Type type) { var sqlTable = new SqlTable(dataContext.MappingSchema, type); if (tableName != null || schemaName != null || databaseName != null || databaseName != null) { sqlTable.TableName = new( tableName ?? sqlTable.TableName.Name, Server : serverName ?? sqlTable.TableName.Server, Database : databaseName ?? sqlTable.TableName.Database, Schema : schemaName ?? sqlTable.TableName.Schema); } if (tableOptions.IsSet()) { sqlTable.TableOptions = tableOptions; } var insertStatement = new SqlInsertStatement { Insert = { Into = sqlTable } }; var ei = new Query <int>(dataContext, null) { Queries = { new QueryInfo { Statement = insertStatement } } }; foreach (var field in sqlTable.Fields.Where(x => columnFilter == null || columnFilter(obj, x.ColumnDescriptor))) { if (field.IsInsertable && !field.ColumnDescriptor.ShouldSkip(obj !, descriptor, SkipModification.Insert)) { var param = GetParameter(type, dataContext, field); ei.Queries[0].AddParameterAccessor(param); insertStatement.Insert.Items.Add(new SqlSetExpression(field, param.SqlParameter)); }