- 增加 ColumnAttribute 可插入(CanInsert)、可更新(CanUpdate);#99

This commit is contained in:
28810
2019-09-26 15:45:40 +08:00
parent d4c766e0b6
commit 6ca226a8e4
7 changed files with 137 additions and 1 deletions

View File

@ -94,5 +94,15 @@ namespace FreeSql.DataAnnotations
/// <0时排后面...-3,-2,-1
/// </summary>
public short Position { get => _Position ?? 0; set => _Position = value; }
internal bool? _CanInsert, _CanUpdate;
/// <summary>
/// 该字段是否可以插入默认值true指定为false插入时该字段会被忽略
/// </summary>
public bool CanInsert { get => _CanInsert ?? true; set => _CanInsert = value; }
/// <summary>
/// 该字段是否可以更新默认值true指定为false更新时该字段会被忽略
/// </summary>
public bool CanUpdate { get => _CanUpdate ?? true; set => _CanUpdate = value; }
}
}

View File

@ -113,5 +113,26 @@ namespace FreeSql.DataAnnotations
_column.Position = value;
return this;
}
/// <summary>
/// 该字段是否可以插入默认值true指定为false插入时该字段会被忽略
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public ColumnFluent CanInsert(bool value)
{
_column.CanInsert = value;
return this;
}
/// <summary>
/// 该字段是否可以更新默认值true指定为false更新时该字段会被忽略
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public ColumnFluent CanUpdate(bool value)
{
_column.CanUpdate = value;
return this;
}
}
}

View File

@ -73,6 +73,16 @@
&lt;0时排后面...-3,-2,-1
</summary>
</member>
<member name="P:FreeSql.DataAnnotations.ColumnAttribute.CanInsert">
<summary>
该字段是否可以插入默认值true指定为false插入时该字段会被忽略
</summary>
</member>
<member name="P:FreeSql.DataAnnotations.ColumnAttribute.CanUpdate">
<summary>
该字段是否可以更新默认值true指定为false更新时该字段会被忽略
</summary>
</member>
<member name="M:FreeSql.DataAnnotations.ColumnFluent.Name(System.String)">
<summary>
数据库列名
@ -140,6 +150,20 @@
<param name="value"></param>
<returns></returns>
</member>
<member name="M:FreeSql.DataAnnotations.ColumnFluent.CanInsert(System.Boolean)">
<summary>
该字段是否可以插入默认值true指定为false插入时该字段会被忽略
</summary>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:FreeSql.DataAnnotations.ColumnFluent.CanUpdate(System.Boolean)">
<summary>
该字段是否可以更新默认值true指定为false更新时该字段会被忽略
</summary>
<param name="value"></param>
<returns></returns>
</member>
<member name="P:FreeSql.DataAnnotations.NavigateAttribute.Bind">
<summary>
手工绑定 OneToMany、ManyToOne 导航关系
@ -2418,6 +2442,16 @@
<param name="database"></param>
<returns></returns>
</member>
<member name="M:FreeSql.Internal.CommonProvider.InsertProvider`1.IgnoreCanInsert">
<summary>
AsType, Ctor, ClearData 三处地方需要重新加载
</summary>
</member>
<member name="M:FreeSql.Internal.CommonProvider.UpdateProvider`1.IgnoreCanUpdate">
<summary>
AsType, Ctor, ClearData 三处地方需要重新加载
</summary>
</member>
<member name="M:FreeSql.Internal.CommonUtils.GetProperyCommentBySummary(System.Type)">
<summary>
通过属性的注释文本,通过 xml 读取

View File

@ -34,14 +34,26 @@ namespace FreeSql.Internal.CommonProvider
_table = _commonUtils.GetTableByEntity(typeof(T1));
_noneParameter = _orm.CodeFirst.IsNoneCommandParameter;
if (_orm.CodeFirst.IsAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
IgnoreCanInsert();
}
/// <summary>
/// AsType, Ctor, ClearData 三处地方需要重新加载
/// </summary>
protected void IgnoreCanInsert()
{
if (_table == null || _table.Type == typeof(object)) return;
foreach (var col in _table.Columns.Values)
if (col.Attribute.CanInsert == false)
_ignore.Add(col.Attribute.Name, true);
}
protected void ClearData()
{
_insertIdentity = false;
_source.Clear();
_ignore.Clear();
_params = null;
IgnoreCanInsert();
}
public IInsert<T1> WithTransaction(DbTransaction transaction)
@ -569,6 +581,7 @@ namespace FreeSql.Internal.CommonProvider
var newtb = _commonUtils.GetTableByEntity(entityType);
_table = newtb ?? throw new Exception("IInsert.AsType 参数错误,请传入正确的实体类型");
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
IgnoreCanInsert();
return this;
}

View File

@ -40,8 +40,19 @@ namespace FreeSql.Internal.CommonProvider
_noneParameter = _orm.CodeFirst.IsNoneCommandParameter;
this.Where(_commonUtils.WhereObject(_table, "", dywhere));
if (_orm.CodeFirst.IsAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
IgnoreCanUpdate();
}
/// <summary>
/// AsType, Ctor, ClearData 三处地方需要重新加载
/// </summary>
protected void IgnoreCanUpdate()
{
if (_table == null || _table.Type == typeof(object)) return;
foreach (var col in _table.Columns.Values)
if (col.Attribute.CanUpdate == false)
_ignore.Add(col.Attribute.Name, true);
}
protected void ClearData()
{
_source.Clear();
@ -51,6 +62,7 @@ namespace FreeSql.Internal.CommonProvider
_setIncr.Clear();
_params.Clear();
_paramsSource.Clear();
IgnoreCanUpdate();
}
public IUpdate<T1> WithTransaction(DbTransaction transaction)
@ -610,6 +622,7 @@ namespace FreeSql.Internal.CommonProvider
var newtb = _commonUtils.GetTableByEntity(entityType);
_table = newtb ?? throw new Exception("IUpdate.AsType 参数错误,请传入正确的实体类型");
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
IgnoreCanUpdate();
return this;
}

View File

@ -128,6 +128,8 @@ namespace FreeSql.Internal
if (trycol._Uniques != null) attr._Uniques = trycol._Uniques;
if (trycol.MapType != null) attr.MapType = trycol.MapType;
if (trycol._Position != null) attr._Position = trycol.Position;
if (trycol._CanInsert != null) attr._CanInsert = trycol.CanInsert;
if (trycol._CanUpdate != null) attr._CanUpdate = trycol.CanUpdate;
if (trycol.DbDefautValue != null) attr.DbDefautValue = trycol.DbDefautValue;
}
var attrs = proto.GetCustomAttributes(typeof(ColumnAttribute), false);
@ -146,6 +148,8 @@ namespace FreeSql.Internal
if (tryattr._Uniques != null) attr._Uniques = tryattr._Uniques;
if (tryattr.MapType != null) attr.MapType = tryattr.MapType;
if (tryattr._Position != null) attr._Position = tryattr.Position;
if (tryattr._CanInsert != null) attr._CanInsert = tryattr.CanInsert;
if (tryattr._CanUpdate != null) attr._CanUpdate = tryattr.CanUpdate;
if (tryattr.DbDefautValue != null) attr.DbDefautValue = tryattr.DbDefautValue;
}
ColumnAttribute ret = null;
@ -160,6 +164,8 @@ namespace FreeSql.Internal
if (attr._Uniques != null) ret = attr;
if (attr.MapType != null) ret = attr;
if (attr._Position != null) ret = attr;
if (attr._CanInsert != null) ret = attr;
if (attr._CanUpdate != null) ret = attr;
if (attr.DbDefautValue != null) ret = attr;
if (ret != null && ret.MapType == null) ret.MapType = proto.PropertyType;
return ret;