mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 增加 EfCoreFluentApi 扩展包,接近 efcore fluentApi 的使用习惯;#4
- 增加 ColumnAttribute 属性 InsertValueSql,插入数据的时候指定用 sql 值;
This commit is contained in:
		@@ -97,5 +97,11 @@ namespace FreeSql.DataAnnotations
 | 
			
		||||
        /// Sqlite -> text<para></para>
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int StringLength { get => _StringLength ?? 0; set => _StringLength = value; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 执行 Insert 方法时使用此值<para></para>
 | 
			
		||||
        /// 注意:如果是 getdate() 这种请可考虑使用 ServerTime,因为它对数据库间作了适配
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string InsertValueSql { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -158,5 +158,17 @@ namespace FreeSql.DataAnnotations
 | 
			
		||||
            _column.StringLength = value;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 执行 Insert 方法时使用此值<para></para>
 | 
			
		||||
        /// 注意:如果是 getdate() 这种请可考虑使用 ServerTime,因为它对数据库间作了适配
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="value"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public ColumnFluent InsertValueSql(string value)
 | 
			
		||||
        {
 | 
			
		||||
            _column.InsertValueSql = value;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,16 +9,21 @@ namespace FreeSql.DataAnnotations
 | 
			
		||||
    public class TableFluent
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        public TableFluent(Type entityType, TableAttribute table)
 | 
			
		||||
        public TableFluent(ICodeFirst codeFirst, Type entityType, TableAttribute table)
 | 
			
		||||
        {
 | 
			
		||||
            _codeFirst = codeFirst;
 | 
			
		||||
            _entityType = entityType;
 | 
			
		||||
            _properties = _entityType.GetPropertiesDictIgnoreCase();
 | 
			
		||||
            _table = table;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ICodeFirst _codeFirst;
 | 
			
		||||
        Type _entityType;
 | 
			
		||||
        Dictionary<string, PropertyInfo> _properties;
 | 
			
		||||
        TableAttribute _table;
 | 
			
		||||
 | 
			
		||||
        public void ConfigEntity<T2>(Action<TableFluent<T2>> fluent2) => _codeFirst.ConfigEntity<T2>(fluent2);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 数据库表名
 | 
			
		||||
        /// </summary>
 | 
			
		||||
@@ -52,6 +57,21 @@ namespace FreeSql.DataAnnotations
 | 
			
		||||
            return new ColumnFluent(col);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 导航关系Fluent,与 NavigateAttribute 对应
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="proto"></param>
 | 
			
		||||
        /// <param name="bind"></param>
 | 
			
		||||
        /// <param name="manyToMany">多对多关系的中间实体类型</param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public TableFluent Navigate(string proto, string bind, Type manyToMany = null)
 | 
			
		||||
        {
 | 
			
		||||
            if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException($"找不到属性名 {proto}");
 | 
			
		||||
            var nav = new NavigateAttribute { Bind = bind, ManyToMany = manyToMany };
 | 
			
		||||
            _table._navigates.AddOrUpdate(tryProto.Name, nav, (name, old) => nav);
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 设置实体的索引
 | 
			
		||||
        /// </summary>
 | 
			
		||||
@@ -70,12 +90,19 @@ namespace FreeSql.DataAnnotations
 | 
			
		||||
    public class TableFluent<T>
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        public TableFluent(TableAttribute table)
 | 
			
		||||
        public TableFluent(ICodeFirst codeFirst, TableAttribute table)
 | 
			
		||||
        {
 | 
			
		||||
            _codeFirst = codeFirst;
 | 
			
		||||
            _properties = typeof(T).GetPropertiesDictIgnoreCase();
 | 
			
		||||
            _table = table;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ICodeFirst _codeFirst;
 | 
			
		||||
        Dictionary<string, PropertyInfo> _properties;
 | 
			
		||||
        TableAttribute _table;
 | 
			
		||||
 | 
			
		||||
        public void ConfigEntity<T2>(Action<TableFluent<T2>> fluent2) => _codeFirst.ConfigEntity<T2>(fluent2);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 数据库表名
 | 
			
		||||
        /// </summary>
 | 
			
		||||
@@ -106,7 +133,12 @@ namespace FreeSql.DataAnnotations
 | 
			
		||||
        {
 | 
			
		||||
            var proto = (column.Body as MemberExpression)?.Member;
 | 
			
		||||
            if (proto == null) throw new FormatException($"错误的表达式格式 {column}");
 | 
			
		||||
            var col = _table._columns.GetOrAdd(proto.Name, name => new ColumnAttribute { Name = proto.Name });
 | 
			
		||||
            return Property(proto.Name);
 | 
			
		||||
        }
 | 
			
		||||
        public ColumnFluent Property(string proto)
 | 
			
		||||
        {
 | 
			
		||||
            if (_properties.TryGetValue(proto, out var tryProto)) throw new KeyNotFoundException($"找不到属性名 {proto}");
 | 
			
		||||
            var col = _table._columns.GetOrAdd(tryProto.Name, name => new ColumnAttribute { Name = proto });
 | 
			
		||||
            return new ColumnFluent(col);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -122,8 +154,13 @@ namespace FreeSql.DataAnnotations
 | 
			
		||||
        {
 | 
			
		||||
            var member = (proto.Body as MemberExpression)?.Member;
 | 
			
		||||
            if (member == null) throw new FormatException($"错误的表达式格式 {proto}");
 | 
			
		||||
            return Navigate(member.Name, bind, manyToMany);
 | 
			
		||||
        }
 | 
			
		||||
        public TableFluent<T> Navigate(string proto, string bind, Type manyToMany = null)
 | 
			
		||||
        {
 | 
			
		||||
            if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException($"找不到属性名 {proto}");
 | 
			
		||||
            var nav = new NavigateAttribute { Bind = bind, ManyToMany = manyToMany };
 | 
			
		||||
            _table._navigates.AddOrUpdate(member.Name, nav, (name, old) => nav);
 | 
			
		||||
            _table._navigates.AddOrUpdate(tryProto.Name, nav, (name, old) => nav);
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -140,5 +177,10 @@ namespace FreeSql.DataAnnotations
 | 
			
		||||
            _table._indexs.AddOrUpdate(name, idx, (_, __) => idx);
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
        public TableFluent<T> IndexRemove(string name)
 | 
			
		||||
        {
 | 
			
		||||
            _table._indexs.TryRemove(name, out var oldidx);
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -98,6 +98,12 @@
 | 
			
		||||
            Sqlite -> text<para></para>
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:FreeSql.DataAnnotations.ColumnAttribute.InsertValueSql">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行 Insert 方法时使用此值<para></para>
 | 
			
		||||
            注意:如果是 getdate() 这种请可考虑使用 ServerTime,因为它对数据库间作了适配
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.DataAnnotations.ColumnFluent.Name(System.String)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            数据库列名
 | 
			
		||||
@@ -198,6 +204,14 @@
 | 
			
		||||
            Sqlite -> text<para></para>
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.DataAnnotations.ColumnFluent.InsertValueSql(System.String)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行 Insert 方法时使用此值<para></para>
 | 
			
		||||
            注意:如果是 getdate() 这种请可考虑使用 ServerTime,因为它对数据库间作了适配
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="value"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="T:FreeSql.DataAnnotations.ExpressionCallAttribute">
 | 
			
		||||
            <summary>
 | 
			
		||||
            自定义表达式函数解析<para></para>
 | 
			
		||||
@@ -319,6 +333,15 @@
 | 
			
		||||
            禁用 CodeFirst 同步结构迁移
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.DataAnnotations.TableFluent.Navigate(System.String,System.String,System.Type)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            导航关系Fluent,与 NavigateAttribute 对应
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="proto"></param>
 | 
			
		||||
            <param name="bind"></param>
 | 
			
		||||
            <param name="manyToMany">多对多关系的中间实体类型</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.DataAnnotations.TableFluent.Index(System.String,System.String,System.Boolean)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            设置实体的索引
 | 
			
		||||
@@ -2224,6 +2247,137 @@
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="readerHander"></param>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``1(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T"></typeparam>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``1(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T"></typeparam>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``2(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``2(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:FreeSql.IAop.ParseExpression">
 | 
			
		||||
            <summary>
 | 
			
		||||
            可自定义解析表达式
 | 
			
		||||
@@ -3002,160 +3156,3 @@
 | 
			
		||||
        </member>
 | 
			
		||||
    </members>
 | 
			
		||||
</doc>
 | 
			
		||||
unc{``0,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            使用 or 拼接两个 lambda 表达式
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T"></typeparam>
 | 
			
		||||
            <param name="exp1"></param>
 | 
			
		||||
            <param name="condition">true 时生效</param>
 | 
			
		||||
            <param name="exp2"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Not``1(System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}},System.Boolean)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            将 lambda 表达式取反
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T"></typeparam>
 | 
			
		||||
            <param name="exp"></param>
 | 
			
		||||
            <param name="condition">true 时生效</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeUtil.NewMongodbId">
 | 
			
		||||
            <summary>
 | 
			
		||||
            生成类似Mongodb的ObjectId有序、不重复Guid
 | 
			
		||||
            </summary>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Insert``1">
 | 
			
		||||
            <summary>
 | 
			
		||||
            插入数据
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Insert``1(``0)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            插入数据,传入实体
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="source"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Insert``1(``0[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            插入数据,传入实体数组
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="source"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Insert``1(System.Collections.Generic.List{``0})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            插入数据,传入实体集合
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="source"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Insert``1(System.Collections.Generic.IEnumerable{``0})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            插入数据,传入实体集合
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="source"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Update``1">
 | 
			
		||||
            <summary>
 | 
			
		||||
            修改数据
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Update``1(System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            修改数据,传入动态对象如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Select``1">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询数据
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Select``1(System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询数据,传入动态对象如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Delete``1">
 | 
			
		||||
            <summary>
 | 
			
		||||
            删除数据
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Delete``1(System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            删除数据,传入动态对象如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Transaction(System.Action)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            开启事务(不支持异步),60秒未执行完成(可能)被其他线程事务自动提交
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="handler">事务体 () => {}</param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Transaction(System.TimeSpan,System.Action)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            开启事务(不支持异步)
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="timeout">超时,未执行完成(可能)被其他线程事务自动提交</param>
 | 
			
		||||
            <param name="handler">事务体 () => {}</param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IFreeSql.Transaction(System.Data.IsolationLevel,System.TimeSpan,System.Action)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            开启事务(不支持异步)
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="isolationLevel"></param>
 | 
			
		||||
            <param name="handler">事务体 () => {}</param>
 | 
			
		||||
            <param name="timeout">超时,未执行完成(可能)被其他线程事务自动提交</param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IFreeSql.Ado">
 | 
			
		||||
            <summary>
 | 
			
		||||
            数据库访问对象
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IFreeSql.Aop">
 | 
			
		||||
            <summary>
 | 
			
		||||
            所有拦截方法都在这里
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IFreeSql.CodeFirst">
 | 
			
		||||
            <summary>
 | 
			
		||||
            CodeFirst 模式开发相关方法
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IFreeSql.DbFirst">
 | 
			
		||||
            <summary>
 | 
			
		||||
            DbFirst 模式开发相关方法
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IFreeSql.GlobalFilter">
 | 
			
		||||
            <summary>
 | 
			
		||||
            全局过滤设置,可默认附加为 Select/Update/Delete 条件
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
    </members>
 | 
			
		||||
</doc>
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,7 @@ namespace FreeSql.Internal
 | 
			
		||||
            if (entity == null) return _orm.CodeFirst;
 | 
			
		||||
            var type = typeof(T);
 | 
			
		||||
            var table = dicConfigEntity.GetOrAdd(type, new TableAttribute());
 | 
			
		||||
            var fluent = new TableFluent<T>(table);
 | 
			
		||||
            var fluent = new TableFluent<T>(CodeFirst, table);
 | 
			
		||||
            entity.Invoke(fluent);
 | 
			
		||||
            Utils.RemoveTableByEntity(type, this); //remove cache
 | 
			
		||||
            return _orm.CodeFirst;
 | 
			
		||||
@@ -67,7 +67,7 @@ namespace FreeSql.Internal
 | 
			
		||||
        {
 | 
			
		||||
            if (entity == null) return _orm.CodeFirst;
 | 
			
		||||
            var table = dicConfigEntity.GetOrAdd(type, new TableAttribute());
 | 
			
		||||
            var fluent = new TableFluent(type, table);
 | 
			
		||||
            var fluent = new TableFluent(CodeFirst, type, table);
 | 
			
		||||
            entity.Invoke(fluent);
 | 
			
		||||
            Utils.RemoveTableByEntity(type, this); //remove cache
 | 
			
		||||
            return _orm.CodeFirst;
 | 
			
		||||
@@ -132,6 +132,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                if (trycol._CanUpdate != null) attr._CanUpdate = trycol.CanUpdate;
 | 
			
		||||
                if (trycol.ServerTime != DateTimeKind.Unspecified) attr.ServerTime = trycol.ServerTime;
 | 
			
		||||
                if (trycol._StringLength != null) attr.StringLength = trycol.StringLength;
 | 
			
		||||
                if (!string.IsNullOrEmpty(trycol.InsertValueSql)) attr.InsertValueSql = trycol.InsertValueSql;
 | 
			
		||||
            }
 | 
			
		||||
            var attrs = proto.GetCustomAttributes(typeof(ColumnAttribute), false);
 | 
			
		||||
            foreach (var tryattrobj in attrs)
 | 
			
		||||
@@ -152,6 +153,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                if (tryattr._CanUpdate != null) attr._CanUpdate = tryattr.CanUpdate;
 | 
			
		||||
                if (tryattr.ServerTime != DateTimeKind.Unspecified) attr.ServerTime = tryattr.ServerTime;
 | 
			
		||||
                if (tryattr._StringLength != null) attr.StringLength = tryattr.StringLength;
 | 
			
		||||
                if (!string.IsNullOrEmpty(tryattr.InsertValueSql)) attr.InsertValueSql = tryattr.InsertValueSql;
 | 
			
		||||
            }
 | 
			
		||||
            ColumnAttribute ret = null;
 | 
			
		||||
            if (!string.IsNullOrEmpty(attr.Name)) ret = attr;
 | 
			
		||||
@@ -168,6 +170,7 @@ namespace FreeSql.Internal
 | 
			
		||||
            if (attr._CanUpdate != null) ret = attr;
 | 
			
		||||
            if (attr.ServerTime != DateTimeKind.Unspecified) ret = attr;
 | 
			
		||||
            if (attr._StringLength != null) ret = attr;
 | 
			
		||||
            if (!string.IsNullOrEmpty(attr.InsertValueSql)) ret = attr;
 | 
			
		||||
            if (ret != null && ret.MapType == null) ret.MapType = proto.PropertyType;
 | 
			
		||||
            return ret;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -191,6 +191,11 @@ namespace FreeSql.Internal
 | 
			
		||||
                    col.DbDefaultValue = colattr.ServerTime == DateTimeKind.Local ? common.Now : common.NowUtc;
 | 
			
		||||
                    col.DbInsertValue = colattr.ServerTime == DateTimeKind.Local ? common.Now : common.NowUtc;
 | 
			
		||||
                }
 | 
			
		||||
                if (string.IsNullOrEmpty(colattr.InsertValueSql) == false)
 | 
			
		||||
                {
 | 
			
		||||
                    col.DbDefaultValue = colattr.InsertValueSql;
 | 
			
		||||
                    col.DbInsertValue = colattr.InsertValueSql;
 | 
			
		||||
                }
 | 
			
		||||
                if (colattr.MapType == typeof(string) && colattr.StringLength != 0)
 | 
			
		||||
                {
 | 
			
		||||
                    int strlen = colattr.StringLength;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user