mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 01:05:27 +08:00 
			
		
		
		
	- 增加 MySql 特有功能 Insert Ignore Into;
This commit is contained in:
		@@ -26,17 +26,32 @@ namespace base_entity
 | 
				
			|||||||
            public T Config { get; set; }
 | 
					            public T Config { get; set; }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public class Products : BaseEntity<Products, int>
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            public string title { get; set; }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        static void Main(string[] args)
 | 
					        static void Main(string[] args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            #region 初始化 IFreeSql
 | 
					            #region 初始化 IFreeSql
 | 
				
			||||||
            BaseEntity.Initialization(new FreeSql.FreeSqlBuilder()
 | 
					            var fsql = new FreeSql.FreeSqlBuilder()
 | 
				
			||||||
                .UseAutoSyncStructure(true)
 | 
					                .UseAutoSyncStructure(true)
 | 
				
			||||||
                .UseNoneCommandParameter(true)
 | 
					                .UseNoneCommandParameter(true)
 | 
				
			||||||
                .UseConnectionString(FreeSql.DataType.Sqlite, "data source=test.db;max pool size=5")
 | 
					                .UseConnectionString(FreeSql.DataType.Sqlite, "data source=test.db;max pool size=5")
 | 
				
			||||||
                .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=2")
 | 
					                //.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=2")
 | 
				
			||||||
                .Build());
 | 
					                .Build();
 | 
				
			||||||
 | 
					            BaseEntity.Initialization(fsql);
 | 
				
			||||||
            #endregion
 | 
					            #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            new Products { title = "product-1" }.Save();
 | 
				
			||||||
 | 
					            new Products { title = "product-2" }.Save();
 | 
				
			||||||
 | 
					            new Products { title = "product-3" }.Save();
 | 
				
			||||||
 | 
					            new Products { title = "product-4" }.Save();
 | 
				
			||||||
 | 
					            new Products { title = "product-5" }.Save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var items1 = Products.Select.Limit(10).OrderByDescending(a => a.CreateTime).ToList();
 | 
				
			||||||
 | 
					            var items2 = fsql.Select<Products>().Limit(10).OrderByDescending(a => a.CreateTime).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            BaseEntity.Orm.UseJsonMap();
 | 
					            BaseEntity.Orm.UseJsonMap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            new S_SysConfig<TestConfig> { Name = "testkey11", Config = new TestConfig { clicks = 11, title = "testtitle11" } }.Save();
 | 
					            new S_SysConfig<TestConfig> { Name = "testkey11", Config = new TestConfig { clicks = 11, title = "testtitle11" } }.Save();
 | 
				
			||||||
@@ -44,6 +59,8 @@ namespace base_entity
 | 
				
			|||||||
            new S_SysConfig<TestConfig> { Name = "testkey33", Config = new TestConfig { clicks = 33, title = "testtitle33" } }.Save();
 | 
					            new S_SysConfig<TestConfig> { Name = "testkey33", Config = new TestConfig { clicks = 33, title = "testtitle33" } }.Save();
 | 
				
			||||||
            var testconfigs11 = S_SysConfig<TestConfig>.Select.ToList();
 | 
					            var testconfigs11 = S_SysConfig<TestConfig>.Select.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var repo = BaseEntity.Orm.Select<TestConfig>().Limit(10).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Task.Run(async () =>
 | 
					            Task.Run(async () =>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                using (var uow = BaseEntity.Begin())
 | 
					                using (var uow = BaseEntity.Begin())
 | 
				
			||||||
@@ -111,6 +128,8 @@ namespace base_entity
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            }).Wait();
 | 
					            }).Wait();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Console.WriteLine("按任意键结束。。。");
 | 
					            Console.WriteLine("按任意键结束。。。");
 | 
				
			||||||
            Console.ReadKey();
 | 
					            Console.ReadKey();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -106,6 +106,13 @@
 | 
				
			|||||||
            清空状态数据
 | 
					            清空状态数据
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.DbSet`1.RemoveAsync(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            根据 lambda 条件删除数据
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="predicate"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="M:FreeSql.DbSet`1.Add(`0)">
 | 
					        <member name="M:FreeSql.DbSet`1.Add(`0)">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            添加
 | 
					            添加
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@ public class g
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    static Lazy<IFreeSql> sqlserverLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
 | 
					    static Lazy<IFreeSql> sqlserverLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
 | 
				
			||||||
        .UseConnectionString(FreeSql.DataType.OdbcSqlServer, "Driver={SQL Server};Server=.;Persist Security Info=False;Trusted_Connection=Yes;Integrated Security=True;DATABASE=freesqlTest_odbc;Pooling=true;Max pool size=3")
 | 
					        .UseConnectionString(FreeSql.DataType.OdbcSqlServer, "Driver={SQL Server};Server=.;Persist Security Info=False;Trusted_Connection=Yes;Integrated Security=True;DATABASE=freesqlTest_odbc;Pooling=true;Max pool size=3")
 | 
				
			||||||
 | 
					        //.UseConnectionString(FreeSql.DataType.OdbcSqlServer, "Driver={SQL Server};Server=192.168.164.129;Persist Security Info=False;Trusted_Connection=Yes;UID=sa;PWD=123456;DATABASE=ds_shop;")
 | 
				
			||||||
        .UseAutoSyncStructure(true)
 | 
					        .UseAutoSyncStructure(true)
 | 
				
			||||||
        .UseMonitorCommand(
 | 
					        .UseMonitorCommand(
 | 
				
			||||||
            cmd => Trace.WriteLine(cmd.CommandText), //监听SQL命令对象,在执行前
 | 
					            cmd => Trace.WriteLine(cmd.CommandText), //监听SQL命令对象,在执行前
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -129,6 +129,29 @@ namespace FreeSql.Tests.MySql
 | 
				
			|||||||
            //insert.AppendData(items.First()).ExecuteInserted();
 | 
					            //insert.AppendData(items.First()).ExecuteInserted();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void MySqlIgnoreInto()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var items = new List<Topic>();
 | 
				
			||||||
 | 
					            for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Assert.Equal(1, insert.MySqlIgnoreInto().AppendData(items.First()).ExecuteAffrows());
 | 
				
			||||||
 | 
					            Assert.Equal(10, insert.MySqlIgnoreInto().AppendData(items).ExecuteAffrows());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Assert.Equal(1, g.mysql.Insert<TestEnumInsertTb>().MySqlIgnoreInto().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).ExecuteAffrows());
 | 
				
			||||||
 | 
					            Assert.Equal(1, g.mysql.Insert<TestEnumInsertTb>().MySqlIgnoreInto().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteAffrows());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            items = new List<Topic>();
 | 
				
			||||||
 | 
					            for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Assert.NotEqual(0, insert.MySqlIgnoreInto().AppendData(items.First()).ExecuteIdentity());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var id = g.mysql.Insert<TestEnumInsertTb>().MySqlIgnoreInto().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).ExecuteIdentity();
 | 
				
			||||||
 | 
					            Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select<TestEnumInsertTb>().Where(a => a.id == id).First()?.type);
 | 
				
			||||||
 | 
					            id = g.mysql.Insert<TestEnumInsertTb>().MySqlIgnoreInto().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteIdentity();
 | 
				
			||||||
 | 
					            Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select<TestEnumInsertTb>().Where(a => a.id == id).First()?.type);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void AsTable()
 | 
					        public void AsTable()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,7 @@ public class g
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    static Lazy<IFreeSql> sqlserverLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
 | 
					    static Lazy<IFreeSql> sqlserverLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
 | 
				
			||||||
        .UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3")
 | 
					        .UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3")
 | 
				
			||||||
 | 
					        //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=192.168.164.129;uid=sa;pwd=123456;Initial Catalog=ds_shop;Pooling=true;Max Pool Size=3")
 | 
				
			||||||
        .UseAutoSyncStructure(true)
 | 
					        .UseAutoSyncStructure(true)
 | 
				
			||||||
        .UseMonitorCommand(
 | 
					        .UseMonitorCommand(
 | 
				
			||||||
            cmd => Trace.WriteLine(cmd.CommandText), //监听SQL命令对象,在执行前
 | 
					            cmd => Trace.WriteLine(cmd.CommandText), //监听SQL命令对象,在执行前
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2000,137 +2000,6 @@
 | 
				
			|||||||
            <param name="parms"></param>
 | 
					            <param name="parms"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </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">
 | 
					        <member name="P:FreeSql.IAop.ParseExpression">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            可自定义解析表达式
 | 
					            可自定义解析表达式
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,7 @@ namespace FreeSql.MySql.Curd
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        internal bool InternalIsIgnoreInto = false;
 | 
				
			||||||
        internal IFreeSql InternalOrm => _orm;
 | 
					        internal IFreeSql InternalOrm => _orm;
 | 
				
			||||||
        internal TableInfo InternalTable => _table;
 | 
					        internal TableInfo InternalTable => _table;
 | 
				
			||||||
        internal DbParameter[] InternalParams => _params;
 | 
					        internal DbParameter[] InternalParams => _params;
 | 
				
			||||||
@@ -33,6 +34,13 @@ namespace FreeSql.MySql.Curd
 | 
				
			|||||||
        public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(5000, 3000);
 | 
					        public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(5000, 3000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override string ToSql()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (InternalIsIgnoreInto == false) return base.ToSqlValuesOrSelectUnionAll();
 | 
				
			||||||
 | 
					            var sql = base.ToSqlValuesOrSelectUnionAll();
 | 
				
			||||||
 | 
					            return $"INSERT IGNORE INTO {sql.Substring(12)}";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override long RawExecuteIdentity()
 | 
					        protected override long RawExecuteIdentity()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var sql = this.ToSql();
 | 
					            var sql = this.ToSql();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
using FreeSql;
 | 
					using FreeSql;
 | 
				
			||||||
using FreeSql.MySql.Curd;
 | 
					using FreeSql.MySql.Curd;
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public static partial class FreeSqlMySqlGlobalExtensions
 | 
					public static partial class FreeSqlMySqlGlobalExtensions
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -22,4 +23,17 @@ public static partial class FreeSqlMySqlGlobalExtensions
 | 
				
			|||||||
    /// <returns></returns>
 | 
					    /// <returns></returns>
 | 
				
			||||||
    public static OnDuplicateKeyUpdate<T1> OnDuplicateKeyUpdate<T1>(this IInsert<T1> that) where T1 : class => new FreeSql.MySql.Curd.OnDuplicateKeyUpdate<T1>(that.InsertIdentity());
 | 
					    public static OnDuplicateKeyUpdate<T1> OnDuplicateKeyUpdate<T1>(this IInsert<T1> that) where T1 : class => new FreeSql.MySql.Curd.OnDuplicateKeyUpdate<T1>(that.InsertIdentity());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// MySql 特有的功能,Insert Ignore Into
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    /// <typeparam name="T1"></typeparam>
 | 
				
			||||||
 | 
					    /// <param name="that"></param>
 | 
				
			||||||
 | 
					    /// <returns></returns>
 | 
				
			||||||
 | 
					    public static IInsert<T1> MySqlIgnoreInto<T1>(this IInsert<T1> that) where T1 : class
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        var _mysqlInsert = that as MySqlInsert<T1>;
 | 
				
			||||||
 | 
					        if (_mysqlInsert == null) throw new Exception("MySqlIgnoreInto 是 FreeSql.Provider.MySql/FreeSql.Provider.MySqlConnector 特有的功能");
 | 
				
			||||||
 | 
					        _mysqlInsert.InternalIsIgnoreInto = true;
 | 
				
			||||||
 | 
					        return that;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,34 +22,14 @@ namespace FreeSql.SqlServer.Curd
 | 
				
			|||||||
        public override long ExecuteIdentity() => base.SplitExecuteIdentity(1000, 2100);
 | 
					        public override long ExecuteIdentity() => base.SplitExecuteIdentity(1000, 2100);
 | 
				
			||||||
        public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(1000, 2100);
 | 
					        public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(1000, 2100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override int RawExecuteAffrows()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var versionGreaterThan10 = (_commonUtils as SqlServerUtils).ServerVersion > 10;
 | 
					            var versionGreaterThan10 = (_commonUtils as SqlServerUtils).ServerVersion > 10;
 | 
				
			||||||
            var sql = versionGreaterThan10 ? this.ToSql() : this.ToSqlValuesOrSelectUnionAll(false);
 | 
					            return this.ToSqlValuesOrSelectUnionAll(versionGreaterThan10);
 | 
				
			||||||
            var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
 | 
					 | 
				
			||||||
            _orm.Aop.CurdBefore?.Invoke(this, before);
 | 
					 | 
				
			||||||
            var affrows = 0;
 | 
					 | 
				
			||||||
            Exception exception = null;
 | 
					 | 
				
			||||||
            try
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                affrows = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            catch (Exception ex)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                exception = ex;
 | 
					 | 
				
			||||||
                throw ex;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            finally
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
 | 
					 | 
				
			||||||
                _orm.Aop.CurdAfter?.Invoke(this, after);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return affrows;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        protected override long RawExecuteIdentity()
 | 
					        protected override long RawExecuteIdentity()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var versionGreaterThan10 = (_commonUtils as SqlServerUtils).ServerVersion > 10;
 | 
					            var sql = this.ToSql();
 | 
				
			||||||
            var sql = versionGreaterThan10 ? this.ToSql() : this.ToSqlValuesOrSelectUnionAll(false);
 | 
					 | 
				
			||||||
            if (string.IsNullOrEmpty(sql)) return 0;
 | 
					            if (string.IsNullOrEmpty(sql)) return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();");
 | 
					            sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();");
 | 
				
			||||||
@@ -75,8 +55,7 @@ namespace FreeSql.SqlServer.Curd
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        protected override List<T1> RawExecuteInserted()
 | 
					        protected override List<T1> RawExecuteInserted()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var versionGreaterThan10 = (_commonUtils as SqlServerUtils).ServerVersion > 10;
 | 
					            var sql = this.ToSql();
 | 
				
			||||||
            var sql = versionGreaterThan10 ? this.ToSql(): this.ToSqlValuesOrSelectUnionAll(false);
 | 
					 | 
				
			||||||
            if (string.IsNullOrEmpty(sql)) return new List<T1>();
 | 
					            if (string.IsNullOrEmpty(sql)) return new List<T1>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sb = new StringBuilder();
 | 
					            var sb = new StringBuilder();
 | 
				
			||||||
@@ -89,7 +68,7 @@ namespace FreeSql.SqlServer.Curd
 | 
				
			|||||||
                ++colidx;
 | 
					                ++colidx;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (versionGreaterThan10)
 | 
					            if ((_commonUtils as SqlServerUtils).ServerVersion > 10)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var validx = sql.IndexOf(") VALUES");
 | 
					                var validx = sql.IndexOf(") VALUES");
 | 
				
			||||||
                if (validx == -1) throw new ArgumentException("找不到 VALUES");
 | 
					                if (validx == -1) throw new ArgumentException("找不到 VALUES");
 | 
				
			||||||
@@ -132,34 +111,9 @@ namespace FreeSql.SqlServer.Curd
 | 
				
			|||||||
        public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(1000, 2100);
 | 
					        public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(1000, 2100);
 | 
				
			||||||
        public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(1000, 2100);
 | 
					        public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(1000, 2100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        async protected override Task<int> RawExecuteAffrowsAsync()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            var versionGreaterThan10 = (_commonUtils as SqlServerUtils).ServerVersion > 10;
 | 
					 | 
				
			||||||
            var sql = versionGreaterThan10 ? this.ToSql() : this.ToSqlValuesOrSelectUnionAll(false);
 | 
					 | 
				
			||||||
            var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
 | 
					 | 
				
			||||||
            _orm.Aop.CurdBefore?.Invoke(this, before);
 | 
					 | 
				
			||||||
            var affrows = 0;
 | 
					 | 
				
			||||||
            Exception exception = null;
 | 
					 | 
				
			||||||
            try
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            catch (Exception ex)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                exception = ex;
 | 
					 | 
				
			||||||
                throw ex;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            finally
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
 | 
					 | 
				
			||||||
                _orm.Aop.CurdAfter?.Invoke(this, after);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return affrows;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        async protected override Task<long> RawExecuteIdentityAsync()
 | 
					        async protected override Task<long> RawExecuteIdentityAsync()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var versionGreaterThan10 = (_commonUtils as SqlServerUtils).ServerVersion > 10;
 | 
					            var sql = this.ToSql();
 | 
				
			||||||
            var sql = versionGreaterThan10 ? this.ToSql() : this.ToSqlValuesOrSelectUnionAll(false);
 | 
					 | 
				
			||||||
            if (string.IsNullOrEmpty(sql)) return 0;
 | 
					            if (string.IsNullOrEmpty(sql)) return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();");
 | 
					            sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();");
 | 
				
			||||||
@@ -185,8 +139,7 @@ namespace FreeSql.SqlServer.Curd
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        async protected override Task<List<T1>> RawExecuteInsertedAsync()
 | 
					        async protected override Task<List<T1>> RawExecuteInsertedAsync()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var versionGreaterThan10 = (_commonUtils as SqlServerUtils).ServerVersion > 10;
 | 
					            var sql = this.ToSql();
 | 
				
			||||||
            var sql = versionGreaterThan10 ? this.ToSql() : this.ToSqlValuesOrSelectUnionAll(false);
 | 
					 | 
				
			||||||
            if (string.IsNullOrEmpty(sql)) return new List<T1>();
 | 
					            if (string.IsNullOrEmpty(sql)) return new List<T1>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sb = new StringBuilder();
 | 
					            var sb = new StringBuilder();
 | 
				
			||||||
@@ -199,7 +152,7 @@ namespace FreeSql.SqlServer.Curd
 | 
				
			|||||||
                ++colidx;
 | 
					                ++colidx;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (versionGreaterThan10)
 | 
					            if ((_commonUtils as SqlServerUtils).ServerVersion > 10)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var validx = sql.IndexOf(") VALUES");
 | 
					                var validx = sql.IndexOf(") VALUES");
 | 
				
			||||||
                if (validx == -1) throw new ArgumentException("找不到 VALUES");
 | 
					                if (validx == -1) throw new ArgumentException("找不到 VALUES");
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user