mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 优化 BulkCopy 默认插入自增键;
- 优化 BulkCopy 对可空类型的属性处理;#227
This commit is contained in:
parent
9f0e28bcac
commit
720960af14
@ -544,24 +544,32 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
var dt = new DataTable();
|
||||
dt.TableName = TableRuleInvoke();
|
||||
var dtCols = new List<NaviteTuple<ColumnInfo, Type, bool>>();
|
||||
foreach (var col in _table.ColumnsByPosition)
|
||||
{
|
||||
if (col.Attribute.IsIdentity && _insertIdentity == false) continue;
|
||||
if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name)) continue;
|
||||
dt.Columns.Add(col.Attribute.Name, col.Attribute.MapType);
|
||||
dt.Columns.Add(col.Attribute.Name, col.Attribute.MapType.NullableTypeOrThis());
|
||||
dtCols.Add(NaviteTuple.Create(col, col.Attribute.MapType.NullableTypeOrThis(), col.Attribute.MapType.IsNullableType()));
|
||||
}
|
||||
if (dt.Columns.Count == 0) return dt;
|
||||
var didx = 0;
|
||||
foreach (var d in _source)
|
||||
{
|
||||
var row = new object[dt.Columns.Count];
|
||||
var rowIndex = 0;
|
||||
foreach (var col in _table.ColumnsByPosition)
|
||||
foreach (var col in dtCols)
|
||||
{
|
||||
if (col.Attribute.IsIdentity && _insertIdentity == false) continue;
|
||||
if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name)) continue;
|
||||
row[rowIndex++] = col.GetMapValue(d);
|
||||
var val = col.Item1.GetMapValue(d);
|
||||
if (col.Item3 == true)
|
||||
{
|
||||
if (val == null) throw new Exception($"[{didx}].{col.Item1.CsName} 值不可为 null;DataTable 限制不可使用 int?/long? 可空类型,IInsert.ToDataTable 将映射成 int/long,因此不可接受 null 值");
|
||||
val = Utils.GetDataReaderValue(col.Item2, val);
|
||||
}
|
||||
row[rowIndex++] = val;
|
||||
}
|
||||
dt.Rows.Add(row);
|
||||
didx++;
|
||||
}
|
||||
return dt;
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
|
||||
var insert = that as FreeSql.MySql.Curd.MySqlInsert<T>;
|
||||
if (insert == null) throw new Exception("ExecuteMySqlBulkCopy 是 FreeSql.Provider.MySqlConnector 特有的功能");
|
||||
|
||||
var dt = that.ToDataTable();
|
||||
var dt = that.InsertIdentity().ToDataTable();
|
||||
if (dt.Rows.Count == 0) return;
|
||||
|
||||
Action<MySqlBulkCopy> writeToServer = bulkCopy =>
|
||||
@ -90,7 +90,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
|
||||
var insert = that as FreeSql.MySql.Curd.MySqlInsert<T>;
|
||||
if (insert == null) throw new Exception("ExecuteMySqlBulkCopyAsync 是 FreeSql.Provider.MySqlConnector 特有的功能");
|
||||
|
||||
var dt = that.ToDataTable();
|
||||
var dt = that.InsertIdentity().ToDataTable();
|
||||
if (dt.Rows.Count == 0) return;
|
||||
|
||||
Func<MySqlBulkCopy, Task> writeToServer = bulkCopy =>
|
||||
|
@ -52,7 +52,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions
|
||||
var insert = that as FreeSql.PostgreSQL.Curd.PostgreSQLInsert<T>;
|
||||
if (insert == null) throw new Exception("ExecutePgCopy 是 FreeSql.Provider.PostgreSQL 特有的功能");
|
||||
|
||||
var dt = that.ToDataTable();
|
||||
var dt = that.InsertIdentity().ToDataTable();
|
||||
if (dt.Rows.Count == 0) return;
|
||||
|
||||
Action<NpgsqlConnection> binaryImport = conn =>
|
||||
@ -124,7 +124,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions
|
||||
var insert = that as FreeSql.PostgreSQL.Curd.PostgreSQLInsert<T>;
|
||||
if (insert == null) throw new Exception("ExecutePgCopyAsync 是 FreeSql.Provider.PostgreSQL 特有的功能");
|
||||
|
||||
var dt = that.ToDataTable();
|
||||
var dt = that.InsertIdentity().ToDataTable();
|
||||
if (dt.Rows.Count == 0) return;
|
||||
Func<NpgsqlConnection, Task> binaryImportAsync = async conn =>
|
||||
{
|
||||
|
@ -70,7 +70,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions
|
||||
var insert = that as FreeSql.SqlServer.Curd.SqlServerInsert<T>;
|
||||
if (insert == null) throw new Exception("ExecuteSqlBulkCopy 是 FreeSql.Provider.SqlServer 特有的功能");
|
||||
|
||||
var dt = that.ToDataTable();
|
||||
var dt = that.InsertIdentity().ToDataTable();
|
||||
if (dt.Rows.Count == 0) return;
|
||||
|
||||
Action<SqlBulkCopy> writeToServer = bulkCopy =>
|
||||
@ -145,7 +145,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions
|
||||
var insert = that as FreeSql.SqlServer.Curd.SqlServerInsert<T>;
|
||||
if (insert == null) throw new Exception("ExecuteSqlBulkCopyAsync 是 FreeSql.Provider.SqlServer 特有的功能");
|
||||
|
||||
var dt = that.ToDataTable();
|
||||
var dt = that.InsertIdentity().ToDataTable();
|
||||
if (dt.Rows.Count == 0) return;
|
||||
|
||||
Func<SqlBulkCopy, Task> writeToServerAsync = bulkCopy =>
|
||||
|
Loading…
x
Reference in New Issue
Block a user