diff --git a/Examples/base_entity/Entities/User.cs b/Examples/base_entity/Entities/User.cs index 457f0d6e..a2bd75ca 100644 --- a/Examples/base_entity/Entities/User.cs +++ b/Examples/base_entity/Entities/User.cs @@ -33,7 +33,7 @@ public class IdentityUser1 public int Id { get; set; } [MaxLength(32)] public string Username { get; set; } - [MaxLength(64)] + [MaxLength(64), Column(InsertValueSql = "'defaultname'")] public string Nickname { get; set; } } diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 386c04bf..7370ff02 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -587,6 +587,7 @@ namespace base_entity new IdentityUser1 { Nickname = "nickname23", Username = "username23" } }; fsql.Insert(bulkUsers).NoneParameter().ExecuteAffrows(); + fsql.Insert(bulkUsers).IgnoreInsertValueSql(a => a.Nickname).NoneParameter().ExecuteAffrows(); bulkUsers = fsql.Select().OrderByDescending(a => a.Id).Limit(3).ToList().ToArray(); bulkUsers[0].Nickname += "_bulkupdate"; bulkUsers[1].Nickname += "_bulkupdate"; diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 537315e2..26522f10 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -800,5 +800,14 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 32b185cc..b7a2ea43 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1650,6 +1650,14 @@ 属性名,或者字段名 + + + 忽略 InsertValueSql 设置,将使用实体对象的值插入 + IgnoreInsertValueSql(a => a.Name) | IgnoreInsertValueSql(a => new{a.Name,a.Time}) | IgnoreInsertValueSql(a => new[]{"name","time"}) + + 属性名,或者字段名 + + 指定可插入自增字段 diff --git a/FreeSql/Interface/Curd/IInsert.cs b/FreeSql/Interface/Curd/IInsert.cs index 30daa129..b5cd7a4a 100644 --- a/FreeSql/Interface/Curd/IInsert.cs +++ b/FreeSql/Interface/Curd/IInsert.cs @@ -76,6 +76,14 @@ namespace FreeSql /// IInsert IgnoreColumns(string[] columns); + /// + /// 忽略 InsertValueSql 设置,将使用实体对象的值插入 + /// IgnoreInsertValueSql(a => a.Name) | IgnoreInsertValueSql(a => new{a.Name,a.Time}) | IgnoreInsertValueSql(a => new[]{"name","time"}) + /// + /// 属性名,或者字段名 + /// + IInsert IgnoreInsertValueSql(Expression> columns); + /// /// 指定可插入自增字段 /// diff --git a/FreeSql/Interface/IAop.cs b/FreeSql/Interface/IAop.cs index 612cdfaf..e4c66df7 100644 --- a/FreeSql/Interface/IAop.cs +++ b/FreeSql/Interface/IAop.cs @@ -308,9 +308,9 @@ namespace FreeSql.Aop #region AuditValue public class AuditValueEventArgs : EventArgs { - public AuditValueEventArgs(AuditValueType autoValueType, ColumnInfo column, PropertyInfo property, object value, object obj) + public AuditValueEventArgs(AuditValueType auditValueType, ColumnInfo column, PropertyInfo property, object value, object obj) { - this.AuditValueType = autoValueType; + this.AuditValueType = auditValueType; this.Column = column; this.Property = property; this._value = value; diff --git a/FreeSql/Internal/CommonProvider/InsertProvider.cs b/FreeSql/Internal/CommonProvider/InsertProvider.cs index 7bd2e76e..00b7e065 100644 --- a/FreeSql/Internal/CommonProvider/InsertProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertProvider.cs @@ -20,6 +20,7 @@ namespace FreeSql.Internal.CommonProvider public CommonUtils _commonUtils; public CommonExpression _commonExpression; public Dictionary _ignore = new Dictionary(StringComparer.CurrentCultureIgnoreCase); + public Dictionary _ignoreInsertValueSql = new Dictionary(StringComparer.CurrentCultureIgnoreCase); public Dictionary _auditValueChangedDict = new Dictionary(StringComparer.CurrentCultureIgnoreCase); public TableInfo _table; public Func _tableRule; @@ -72,6 +73,7 @@ namespace FreeSql.Internal.CommonProvider _source.Clear(); _sourceOld = _source; _ignore.Clear(); + _ignoreInsertValueSql.Clear(); _auditValueChangedDict.Clear(); _params = null; IgnoreCanInsert(); @@ -530,6 +532,7 @@ namespace FreeSql.Internal.CommonProvider public IInsert IgnoreColumns(Expression> columns) => IgnoreColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, null, columns?.Body, false, null)); public IInsert InsertColumns(Expression> columns) => InsertColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, null, columns?.Body, false, null)); + public IInsert IgnoreInsertValueSql(Expression> columns) => IgnoreInsertValueSql(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, null, columns?.Body, false, null)); public IInsert IgnoreColumns(string[] columns) { @@ -549,6 +552,15 @@ namespace FreeSql.Internal.CommonProvider _ignore.Add(col.Attribute.Name, true); return this; } + public IInsert IgnoreInsertValueSql(string[] columns) + { + var cols = columns.Distinct().ToDictionary(a => a); + _ignoreInsertValueSql.Clear(); + foreach (var col in _table.Columns.Values) + if (cols.ContainsKey(col.Attribute.Name) == true || cols.ContainsKey(col.CsName) == true) + _ignoreInsertValueSql.Add(col.Attribute.Name, true); + return this; + } protected string TableRuleInvoke() { @@ -655,7 +667,7 @@ namespace FreeSql.Internal.CommonProvider if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name)) continue; if (colidx2 > 0) sb.Append(", "); - if (string.IsNullOrEmpty(col.DbInsertValue) == false) + if (string.IsNullOrEmpty(col.DbInsertValue) == false && _ignoreInsertValueSql.ContainsKey(col.Attribute.Name) == false) sb.Append(col.DbInsertValue); else { diff --git a/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleInsert.cs b/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleInsert.cs index bca3820e..4cb4146f 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleInsert.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleInsert.cs @@ -63,7 +63,7 @@ namespace FreeSql.Custom.Oracle if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name)) continue; if (colidx2 > 0) sb.Append(", "); - if (string.IsNullOrEmpty(col.DbInsertValue) == false) + if (string.IsNullOrEmpty(col.DbInsertValue) == false && _ignoreInsertValueSql.ContainsKey(col.Attribute.Name) == false) sb.Append(col.DbInsertValue); else { diff --git a/Providers/FreeSql.Provider.Dameng/Curd/DamengInsert.cs b/Providers/FreeSql.Provider.Dameng/Curd/DamengInsert.cs index b1f6167b..311cbfa1 100644 --- a/Providers/FreeSql.Provider.Dameng/Curd/DamengInsert.cs +++ b/Providers/FreeSql.Provider.Dameng/Curd/DamengInsert.cs @@ -67,7 +67,7 @@ namespace FreeSql.Dameng.Curd if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name)) continue; if (colidx2 > 0) sb.Append(", "); - if (string.IsNullOrEmpty(col.DbInsertValue) == false) + if (string.IsNullOrEmpty(col.DbInsertValue) == false && _ignoreInsertValueSql.ContainsKey(col.Attribute.Name) == false) sb.Append(col.DbInsertValue); else { diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs index f96a4b0f..d9932214 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs @@ -63,7 +63,7 @@ namespace FreeSql.Odbc.Dameng if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name)) continue; if (colidx2 > 0) sb.Append(", "); - if (string.IsNullOrEmpty(col.DbInsertValue) == false) + if (string.IsNullOrEmpty(col.DbInsertValue) == false && _ignoreInsertValueSql.ContainsKey(col.Attribute.Name) == false) sb.Append(col.DbInsertValue); else { diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs index e34db5e7..e37b718a 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs @@ -63,7 +63,7 @@ namespace FreeSql.Odbc.Oracle if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name)) continue; if (colidx2 > 0) sb.Append(", "); - if (string.IsNullOrEmpty(col.DbInsertValue) == false) + if (string.IsNullOrEmpty(col.DbInsertValue) == false && _ignoreInsertValueSql.ContainsKey(col.Attribute.Name) == false) sb.Append(col.DbInsertValue); else { diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs index 45a1cb26..d696e53f 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs @@ -80,7 +80,7 @@ namespace FreeSql.Oracle.Curd foreach (var col in cols) { if (colidx2 > 0) sb.Append(", "); - if (string.IsNullOrEmpty(col.DbInsertValue) == false) + if (string.IsNullOrEmpty(col.DbInsertValue) == false && _ignoreInsertValueSql.ContainsKey(col.Attribute.Name) == false) sb.Append(col.DbInsertValue); else { @@ -144,7 +144,7 @@ namespace FreeSql.Oracle.Curd if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name)) continue; if (colidx2 > 0) sb.Append(", "); - if (string.IsNullOrEmpty(col.DbInsertValue) == false) + if (string.IsNullOrEmpty(col.DbInsertValue) == false && _ignoreInsertValueSql.ContainsKey(col.Attribute.Name) == false) sb.Append(col.DbInsertValue); else {