mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 优化 Firebird CodeFirst 迁移代码;
This commit is contained in:
		@@ -10,6 +10,29 @@ namespace FreeSql.Tests.Firebird
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    public class FirebirdCodeFirstTest
 | 
					    public class FirebirdCodeFirstTest
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void Issues1413()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var fsql = g.firebird;
 | 
				
			||||||
 | 
					            fsql.Select<MCliFile>().Count();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Table(Name = "Issues1413_client_file")]
 | 
				
			||||||
 | 
					        [Index("idx_Issues1413_client_file", "cfiState, cfiBranch desc")]
 | 
				
			||||||
 | 
					        public class MCliFile
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            [Column(IsPrimary = true, StringLength = 16, Position = 1)]
 | 
				
			||||||
 | 
					            public string cfiNo { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            public short cfiState { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [Column(StringLength = 6, CanUpdate = false, IsNullable = false)]
 | 
				
			||||||
 | 
					            public string cfiBranch { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [Column(CanUpdate = false, IsNullable = false)]
 | 
				
			||||||
 | 
					            public string cfiName { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Test_0String()
 | 
					        public void Test_0String()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3692,234 +3692,7 @@
 | 
				
			|||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="P:FreeSql.Aop.SyncStructureAfterEventArgs.Exception">
 | 
					        <member name="P:FreeSql.Aop.SyncStructureAfterEventArgs.Exception">
 | 
				
			||||||
            <summary>
 | 
					           /param>
 | 
				
			||||||
            发生的错误
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.SyncStructureAfterEventArgs.ElapsedTicks">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            耗时(单位:Ticks)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.SyncStructureAfterEventArgs.ElapsedMilliseconds">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            耗时(单位:毫秒)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.AuditValueEventArgs.AuditValueType">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            类型
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.AuditValueEventArgs.Column">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            属性列的元数据
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.AuditValueEventArgs.Property">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            反射的属性信息
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.AuditValueEventArgs.Value">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            获取实体的属性值,也可以设置实体的属性新值
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.AuditValueEventArgs.Object">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            实体对象
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.AuditValueEventArgs.ObjectAuditBreak">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            中断实体对象审计<para></para>
 | 
					 | 
				
			||||||
            false: 每个实体对象的属性都会审计(默认)<para></para>
 | 
					 | 
				
			||||||
            true: 每个实体对象只审计一次
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.AuditDataReaderEventArgs.DataReader">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            ADO.NET 数据流读取对象
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.AuditDataReaderEventArgs.Index">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            DataReader 对应的 Index 位置
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.AuditDataReaderEventArgs.Value">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            获取 Index 对应的值,也可以设置拦截的新值
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.CommandBeforeEventArgs.Identifier">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            标识符,可将 CommandBefore 与 CommandAfter 进行匹配
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.CommandBeforeEventArgs.States">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            状态数据,可与 CommandAfter 共享
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.CommandAfterEventArgs.Exception">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            发生的错误
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.CommandAfterEventArgs.Log">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            执行SQL命令,返回的结果
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.CommandAfterEventArgs.ElapsedTicks">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            耗时(单位:Ticks)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.CommandAfterEventArgs.ElapsedMilliseconds">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            耗时(单位:毫秒)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.TraceBeforeEventArgs.Identifier">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            标识符,可将 TraceBeforeEventArgs 与 TraceAfterEventArgs 进行匹配
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.TraceBeforeEventArgs.States">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            状态数据,可与 TraceAfter 共享
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.TraceAfterEventArgs.Remark">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            备注
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.TraceAfterEventArgs.Exception">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            发生的错误
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.TraceAfterEventArgs.ElapsedTicks">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            耗时(单位:Ticks)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.Aop.TraceAfterEventArgs.ElapsedMilliseconds">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            耗时(单位:毫秒)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.ICodeFirst.IsAutoSyncStructure">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            【开发环境必备】自动同步实体结构到数据库,程序运行中检查实体表是否存在,然后创建或修改
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.ICodeFirst.IsSyncStructureToLower">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            转小写同步结构,适用 PostgreSQL
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.ICodeFirst.IsSyncStructureToUpper">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            转大写同步结构,适用 Oracle/达梦/人大金仓
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.ICodeFirst.IsConfigEntityFromDbFirst">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。<para></para>
 | 
					 | 
				
			||||||
            本功能会影响 IFreeSql 首次访问的速度。<para></para>
 | 
					 | 
				
			||||||
            若使用 CodeFirst 创建索引后,又直接在数据库上建了索引,若无本功能下一次 CodeFirst 迁移时数据库上创建的索引将被删除
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.ICodeFirst.IsNoneCommandParameter">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            不使用命令参数化执行,针对 Insert/Update
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.ICodeFirst.IsGenerateCommandParameterWithLambda">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            是否生成命令参数化执行,针对 lambda 表达式解析<para></para>
 | 
					 | 
				
			||||||
            注意:常量不会参数化,变量才会做参数化<para></para>
 | 
					 | 
				
			||||||
            var id = 100;
 | 
					 | 
				
			||||||
            fsql.Select<T>().Where(a => a.id == id) 会参数化<para></para>
 | 
					 | 
				
			||||||
            fsql.Select<T>().Where(a => a.id == 100) 不会参数化
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:FreeSql.ICodeFirst.IsLazyLoading">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            延时加载导航属性对象,导航属性需要声明 virtual
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="M:FreeSql.ICodeFirst.GetComparisonDDLStatements``1">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            将实体类型与数据库对比,返回DDL语句
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <typeparam name="TEntity"></typeparam>
 | 
					 | 
				
			||||||
            <returns></returns>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="M:FreeSql.ICodeFirst.GetComparisonDDLStatements(System.Type[])">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            将实体类型集合与数据库对比,返回DDL语句
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <param name="entityTypes">实体类型</param>
 | 
					 | 
				
			||||||
            <returns></returns>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="M:FreeSql.ICodeFirst.GetComparisonDDLStatements(System.Type,System.String)">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            将实体类型与数据库对比,返回DDL语句(指定表名)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <param name="entityType">实体类型</param>
 | 
					 | 
				
			||||||
            <param name="tableName">指定表名对比</param>
 | 
					 | 
				
			||||||
            <returns></returns>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="M:FreeSql.ICodeFirst.SyncStructure``1">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            同步实体类型到数据库<para></para>
 | 
					 | 
				
			||||||
            注意:生产环境中谨慎使用
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <typeparam name="TEntity"></typeparam>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="M:FreeSql.ICodeFirst.SyncStructure(System.Type[])">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            同步实体类型集合到数据库<para></para>
 | 
					 | 
				
			||||||
            注意:生产环境中谨慎使用
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <param name="entityTypes"></param>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="M:FreeSql.ICodeFirst.SyncStructure(System.Type,System.String,System.Boolean)">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            同步实体类型到数据库(指定表名)<para></para>
 | 
					 | 
				
			||||||
            注意:生产环境中谨慎使用
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <param name="entityType">实体类型</param>
 | 
					 | 
				
			||||||
            <param name="tableName">指定表名对比</param>
 | 
					 | 
				
			||||||
            <param name="isForceSync">强制同步结构,无视缓存每次都同步</param>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="M:FreeSql.ICodeFirst.GetDbInfo(System.Type)">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            根据 System.Type 获取数据库信息
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <param name="type"></param>
 | 
					 | 
				
			||||||
            <returns></returns>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="M:FreeSql.ICodeFirst.ConfigEntity``1(System.Action{FreeSql.DataAnnotations.TableFluent{``0}})">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            FreeSql FluentApi 配置实体,方法名与特性相同
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <typeparam name="T"></typeparam>
 | 
					 | 
				
			||||||
            <param name="entity"></param>
 | 
					 | 
				
			||||||
            <returns></returns>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="M:FreeSql.ICodeFirst.ConfigEntity(System.Type,System.Action{FreeSql.DataAnnotations.TableFluent})">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            FreeSql FluentApi 配置实体,方法名与特性相同
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <param name="type"></param>
 | 
					 | 
				
			||||||
            <param name="entity"></param>
 | 
					 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="M:FreeSql.ICodeFirst.GetConfigEntity(System.Type)">
 | 
					        <member name="M:FreeSql.ICodeFirst.GetConfigEntity(System.Type)">
 | 
				
			||||||
@@ -4192,6 +3965,222 @@
 | 
				
			|||||||
            <param name="where">表达式</param>
 | 
					            <param name="where">表达式</param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.Internal.GlobalFilter.ApplyOnlyIf``1(System.String,System.Func{System.Boolean},System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            创建一个过滤器(实体类型 属于指定 TEntity 才会生效)<para></para>
 | 
				
			||||||
 | 
					            场景:当登陆身份是管理员,则过滤条件不生效<parypeValue(FreeSql.DatabaseModel.DbColumnInfo)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            获取c#值
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="column"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IDbFirst.GetCsType(FreeSql.DatabaseModel.DbColumnInfo)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            获取c#类型,int、long
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="column"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IDbFirst.GetCsTypeInfo(FreeSql.DatabaseModel.DbColumnInfo)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            获取c#类型对象
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="column"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IDbFirst.GetDataReaderMethod(FreeSql.DatabaseModel.DbColumnInfo)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            获取ado.net读取方法, GetBoolean、GetInt64
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="column"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IDbFirst.GetCsStringify(FreeSql.DatabaseModel.DbColumnInfo)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            序列化
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="column"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IDbFirst.GetCsParse(FreeSql.DatabaseModel.DbColumnInfo)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            反序列化
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="column"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IDbFirst.GetEnumsByDatabase(System.String[])">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            获取数据库枚举类型,适用 PostgreSQL
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="database"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="F:FreeSql.Internal.BaseDiyMemberExpression._lambdaParameter">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            临时 LambdaExpression.Parameter
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.Internal.CommonProvider.InsertOrUpdateProvider`1.SplitSourceByIdentityValueIsNull(System.Collections.Generic.List{`0})">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            如果实体类有自增属性,分成两个 List,有值的Item1 merge,无值的Item2 insert
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="source"></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.GetPropertyCommentByDescriptionAttribute(System.Type)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            动态读取 DescriptionAttribute 注释文本
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="type"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.Internal.CommonUtils.GetProperyCommentBySummary(System.Type)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            通过属性的注释文本,通过 xml 读取
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="type"></param>
 | 
				
			||||||
 | 
					            <returns>Dict:key=属性名,value=注释</returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Internal.DbUpdateVersionException.Table">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            更新实体的元数据
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Internal.DbUpdateVersionException.Sql">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            执行更新的 SQL
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Internal.DbUpdateVersionException.DbParams">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            执行更新命令的参数
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Internal.DbUpdateVersionException.Affrows">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            执行更新命令影响的行
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Internal.DbUpdateVersionException.EntitySourceCount">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            更新的实体数量
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Internal.DbUpdateVersionException.EntitySource">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            更新的实体
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="T:FreeSql.Internal.MappingPriorityType">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            映射优先级,默认: Attribute > FluentApi > Aop
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="F:FreeSql.Internal.MappingPriorityType.Attribute">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            实体特性<para></para>
 | 
				
			||||||
 | 
					            [Table(Name = "tabname")]<para></para>
 | 
				
			||||||
 | 
					            [Column(Name = "table_id")]
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="F:FreeSql.Internal.MappingPriorityType.FluentApi">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            流式接口<para></para>
 | 
				
			||||||
 | 
					            fsql.CodeFirst.ConfigEntity(a => a.Name("tabname"))<para></para>
 | 
				
			||||||
 | 
					            fsql.CodeFirst.ConfigEntity(a => a.Property(b => b.Id).Name("table_id"))
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="F:FreeSql.Internal.MappingPriorityType.Aop">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            AOP 特性 https://github.com/dotnetcore/FreeSql/wiki/AOP<para></para>
 | 
				
			||||||
 | 
					            fsql.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = "public.tabname";<para></para>
 | 
				
			||||||
 | 
					            fsql.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = "table_id";<para></para>
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="F:FreeSql.Internal.NameConvertType.None">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            不进行任何处理
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="F:FreeSql.Internal.NameConvertType.PascalCaseToUnderscore">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            将帕斯卡命名字符串转换为下划线分隔字符串
 | 
				
			||||||
 | 
					            <para></para>
 | 
				
			||||||
 | 
					            BigApple -> Big_Apple
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="F:FreeSql.Internal.NameConvertType.PascalCaseToUnderscoreWithUpper">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全大写
 | 
				
			||||||
 | 
					            <para></para>
 | 
				
			||||||
 | 
					            BigApple -> BIG_APPLE
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="F:FreeSql.Internal.NameConvertType.PascalCaseToUnderscoreWithLower">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全小写
 | 
				
			||||||
 | 
					            <para></para>
 | 
				
			||||||
 | 
					            BigApple -> big_apple
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="F:FreeSql.Internal.NameConvertType.ToUpper">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            将字符串转换为大写
 | 
				
			||||||
 | 
					            <para></para>
 | 
				
			||||||
 | 
					            BigApple -> BIGAPPLE
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="F:FreeSql.Internal.NameConvertType.ToLower">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            将字符串转换为小写
 | 
				
			||||||
 | 
					            <para></para>
 | 
				
			||||||
 | 
					            BigApple -> bigapple
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.Internal.GlobalFilter.Apply``1(System.String,System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            创建一个过滤器<para></para>
 | 
				
			||||||
 | 
					            提示:在 Lambda 中判断登陆身份,请参考资料 AsyncLocal
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <typeparam name="TEntity"></typeparam>
 | 
				
			||||||
 | 
					            <param name="name">名字</param>
 | 
				
			||||||
 | 
					            <param name="where">表达式</param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.Internal.GlobalFilter.ApplyIf``1(System.String,System.Func{System.Boolean},System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            创建一个动态过滤器,当 condition 返回值为 true 时才生效<para></para>
 | 
				
			||||||
 | 
					            场景:当登陆身份是管理员,则过滤条件不生效<para></para>
 | 
				
			||||||
 | 
					            提示:在 Lambda 中判断登陆身份,请参考资料 AsyncLocal
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <typeparam name="TEntity"></typeparam>
 | 
				
			||||||
 | 
					            <param name="name">名字</param>
 | 
				
			||||||
 | 
					            <param name="condition">委托,返回值为 true 时才生效</param>
 | 
				
			||||||
 | 
					            <param name="where">表达式</param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.Internal.GlobalFilter.ApplyOnly``1(System.String,System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            创建一个过滤器(实体类型 属于指定 TEntity 才会生效)<para></para>
 | 
				
			||||||
 | 
					            提示:在 Lambda 中判断登陆身份,请参考资料 AsyncLocal
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <typeparam name="TEntity"></typeparam>
 | 
				
			||||||
 | 
					            <param name="name">名字</param>
 | 
				
			||||||
 | 
					            <param name="where">表达式</param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="M:FreeSql.Internal.GlobalFilter.ApplyOnlyIf``1(System.String,System.Func{System.Boolean},System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
 | 
					        <member name="M:FreeSql.Internal.GlobalFilter.ApplyOnlyIf``1(System.String,System.Func{System.Boolean},System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            创建一个过滤器(实体类型 属于指定 TEntity 才会生效)<para></para>
 | 
					            创建一个过滤器(实体类型 属于指定 TEntity 才会生效)<para></para>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -237,27 +237,32 @@ order by a.rdb$relation_name, a.rdb$field_position", tboldname ?? tbname);
 | 
				
			|||||||
select
 | 
					select
 | 
				
			||||||
trim(c.rdb$field_name),
 | 
					trim(c.rdb$field_name),
 | 
				
			||||||
trim(d.rdb$index_name),
 | 
					trim(d.rdb$index_name),
 | 
				
			||||||
0,
 | 
					coalesce(d.rdb$index_type, 0),
 | 
				
			||||||
case when d.rdb$unique_flag = 1 then 1 else 0 end
 | 
					case when d.rdb$unique_flag = 1 then 1 else 0 end
 | 
				
			||||||
from rdb$indices d
 | 
					from rdb$indices d
 | 
				
			||||||
inner join rdb$index_segments c on c.rdb$index_name = d.rdb$index_name
 | 
					inner join rdb$index_segments c on c.rdb$index_name = d.rdb$index_name
 | 
				
			||||||
where d.rdb$index_type = 0 and trim(d.rdb$relation_name) = {0}", tboldname ?? tbname);
 | 
					where trim(d.rdb$relation_name) = {0}", tboldname ?? tbname);
 | 
				
			||||||
                var dsuk = _orm.Ado.ExecuteArray(CommandType.Text, dsuksql).Select(a => new[] { string.Concat(a[0]), string.Concat(a[1]), string.Concat(a[2]), string.Concat(a[3]) });
 | 
					                var dsuk = _orm.Ado.ExecuteArray(CommandType.Text, dsuksql).Select(a => new[] { string.Concat(a[0]), string.Concat(a[1]), string.Concat(a[2]), string.Concat(a[3]) });
 | 
				
			||||||
                foreach (var uk in tb.Indexes)
 | 
					                foreach (var uk in tb.Indexes)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
 | 
					                    if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
 | 
				
			||||||
                    var ukname = ReplaceIndexName(uk.Name, tbname);
 | 
					                    var ukname = ReplaceIndexName(uk.Name, tbname);
 | 
				
			||||||
                    var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
 | 
					                    var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
 | 
				
			||||||
                    if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
 | 
					                    if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || 
 | 
				
			||||||
 | 
					                        dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0).Any()).Count() != uk.Columns.Length ||
 | 
				
			||||||
 | 
					                        dsukfind1.Any(a => a[2] == "1") && !uk.Columns.Any(a => a.IsDesc))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        if (dsukfind1.Any()) sb.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname)).Append(";\r\n");
 | 
					                        if (dsukfind1.Any()) sb.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname))
 | 
				
			||||||
 | 
					                                //.Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname))
 | 
				
			||||||
 | 
					                                .Append(";\r\n");
 | 
				
			||||||
                        sb.Append("CREATE ");
 | 
					                        sb.Append("CREATE ");
 | 
				
			||||||
                        if (uk.IsUnique) sb.Append("UNIQUE ");
 | 
					                        if (uk.IsUnique) sb.Append("UNIQUE ");
 | 
				
			||||||
 | 
					                        if (uk.Columns.Any(a => a.IsDesc)) sb.Append("DESC ");
 | 
				
			||||||
                        sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname)).Append("(");
 | 
					                        sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname)).Append("(");
 | 
				
			||||||
                        foreach (var tbcol in uk.Columns)
 | 
					                        foreach (var tbcol in uk.Columns)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
 | 
					                            sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
 | 
				
			||||||
                            if (tbcol.IsDesc) sb.Append(" DESC");
 | 
					                            //if (tbcol.IsDesc) sb.Append(" DESC");
 | 
				
			||||||
                            sb.Append(", ");
 | 
					                            sb.Append(", ");
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        sb.Remove(sb.Length - 2, 2).Append(");\r\n");
 | 
					                        sb.Remove(sb.Length - 2, 2).Append(");\r\n");
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user