From f22f65fee9de6fae2c23620de9f0b94d01121045 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Fri, 28 Feb 2020 10:41:03 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20DbContext/Repository?= =?UTF-8?q?=20Update=20=E4=B8=8D=E6=9B=B4=E6=96=B0=20DbUpdateValue=20?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B#219?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 7 ----- ...eeSql.Tests.Provider.MySqlConnector.csproj | 1 + .../MySqlConnector/MySqlCodeFirstTest.cs | 24 ++++++++++++++ .../Dameng/DamengCodeFirstTest.cs | 22 +++++++++++++ .../Default/OdbcCodeFirstTest.cs | 22 +++++++++++++ .../MySql/MySqlCodeFirstTest.cs | 22 +++++++++++++ .../Oracle/OracleCodeFirstTest.cs | 22 +++++++++++++ .../PostgreSQL/PostgreSQLCodeFirstTest.cs | 22 +++++++++++++ .../SqlServer/SqlServerCodeFirstTest.cs | 22 +++++++++++++ .../MsAccess/MsAccessCodeFirstTest.cs | 22 +++++++++++++ .../FreeSql.Tests/MySql/MySqlCodeFirstTest.cs | 26 +++++++++++++++- .../Oracle/OracleCodeFirstTest.cs | 22 +++++++++++++ .../PostgreSQL/PostgreSQLCodeFirstTest.cs | 22 +++++++++++++ .../SqlServer/SqlServerCodeFirstTest.cs | 22 +++++++++++++ .../Sqlite/SqliteCodeFirstTest.cs | 22 +++++++++++++ FreeSql.Tests/FreeSql.Tests/UnitTest3.cs | 8 +++++ FreeSql/Extensions/EntityUtilExtensions.cs | 31 +++++++++++++------ 17 files changed, 321 insertions(+), 18 deletions(-) diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index d9f91124..dc0203b8 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -110,13 +110,6 @@ 清空状态数据 - - - 根据 lambda 条件删除数据 - - - - 添加 diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/FreeSql.Tests.Provider.MySqlConnector.csproj b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/FreeSql.Tests.Provider.MySqlConnector.csproj index 9ed1b21a..07efc1f8 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/FreeSql.Tests.Provider.MySqlConnector.csproj +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/FreeSql.Tests.Provider.MySqlConnector.csproj @@ -17,6 +17,7 @@ + diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlCodeFirstTest.cs index 7f174fd9..86460dce 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlCodeFirstTest.cs @@ -57,6 +57,30 @@ namespace FreeSql.Tests.MySqlConnector Assert.Equal(item., item2.); g.mysql.Update<ı2>().SetSource(item2).ExecuteAffrows(); + + + + item. = "Ա"; + Assert.Equal(1, g.mysql.Update<ı2>().SetSource(item).ExecuteAffrows()); + item2 = g.mysql.Select<ı2>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo"; + var repo = g.mysql.GetRepository<ı2>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.mysql.Select<ı2>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.mysql.Select<ı2>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); } class ı2 { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengCodeFirstTest.cs index 9d19d28b..b5ba4461 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengCodeFirstTest.cs @@ -28,6 +28,28 @@ namespace FreeSql.Tests.Odbc.Dameng Assert.NotNull(item2); Assert.Equal(item., item2.); Assert.Equal(item., item2.); + + item. = "Ա"; + Assert.Equal(1, g.dameng.Update<ı>().SetSource(item).ExecuteAffrows()); + item2 = g.dameng.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo"; + var repo = g.dameng.GetRepository<ı>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.dameng.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.dameng.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); } class ı { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcCodeFirstTest.cs index c26d27ff..e04d5d40 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcCodeFirstTest.cs @@ -25,6 +25,28 @@ namespace FreeSql.Tests.Odbc.Default Assert.NotNull(item2); Assert.Equal(item.编号, item2.编号); Assert.Equal(item.标题, item2.标题); + + item.标题 = "测试标题更新"; + Assert.Equal(1, g.odbc.Update<测试中文表>().SetSource(item).ExecuteAffrows()); + item2 = g.odbc.Select<测试中文表>().Where(a => a.编号 == item.编号).First(); + Assert.NotNull(item2); + Assert.Equal(item.编号, item2.编号); + Assert.Equal(item.标题, item2.标题); + + item.标题 = "测试标题更新_repo"; + var repo = g.odbc.GetRepository<测试中文表>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.odbc.Select<测试中文表>().Where(a => a.编号 == item.编号).First(); + Assert.NotNull(item2); + Assert.Equal(item.编号, item2.编号); + Assert.Equal(item.标题, item2.标题); + + item.标题 = "测试标题更新_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.odbc.Select<测试中文表>().Where(a => a.编号 == item.编号).First(); + Assert.NotNull(item2); + Assert.Equal(item.编号, item2.编号); + Assert.Equal(item.标题, item2.标题); } class 测试中文表 { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlCodeFirstTest.cs index d06c3a27..6c52d3ae 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlCodeFirstTest.cs @@ -55,6 +55,28 @@ namespace FreeSql.Tests.Odbc.MySql Assert.NotNull(item2); Assert.Equal(item., item2.); Assert.Equal(item., item2.); + + item. = "Ա"; + Assert.Equal(1, g.mysql.Update<ı2>().SetSource(item).ExecuteAffrows()); + item2 = g.mysql.Select<ı2>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo"; + var repo = g.mysql.GetRepository<ı2>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.mysql.Select<ı2>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.mysql.Select<ı2>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); } class ı2 { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleCodeFirstTest.cs index a5686eeb..2ae10e27 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleCodeFirstTest.cs @@ -28,6 +28,28 @@ namespace FreeSql.Tests.Odbc.Oracle Assert.NotNull(item2); Assert.Equal(item., item2.); Assert.Equal(item., item2.); + + item. = "Ա"; + Assert.Equal(1, g.oracle.Update<ı>().SetSource(item).ExecuteAffrows()); + item2 = g.oracle.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo"; + var repo = g.oracle.GetRepository<ı>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.oracle.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.oracle.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); } class ı { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLCodeFirstTest.cs index 81773eba..96a926fd 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLCodeFirstTest.cs @@ -32,6 +32,28 @@ namespace FreeSql.Tests.Odbc.PostgreSQL Assert.NotNull(item2); Assert.Equal(item., item2.); Assert.Equal(item., item2.); + + item. = "Ա"; + Assert.Equal(1, g.pgsql.Update<ı>().SetSource(item).ExecuteAffrows()); + item2 = g.pgsql.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo"; + var repo = g.pgsql.GetRepository<ı>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.pgsql.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.pgsql.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); } class ı { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerCodeFirstTest.cs index 68ca3891..355854b2 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerCodeFirstTest.cs @@ -29,6 +29,28 @@ namespace FreeSql.Tests.Odbc.SqlServer Assert.NotNull(item2); Assert.Equal(item., item2.); Assert.Equal(item., item2.); + + item. = "Ա"; + Assert.Equal(1, g.sqlserver.Update<ı>().SetSource(item).ExecuteAffrows()); + item2 = g.sqlserver.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo"; + var repo = g.sqlserver.GetRepository<ı>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.sqlserver.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.sqlserver.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); } class ı { diff --git a/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessCodeFirstTest.cs index 4f3506f1..bd27dc0c 100644 --- a/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessCodeFirstTest.cs @@ -28,6 +28,28 @@ namespace FreeSql.Tests.MsAccess Assert.NotNull(item2); Assert.Equal(item., item2.); Assert.Equal(item., item2.); + + item. = "Ա"; + Assert.Equal(1, g.msaccess.Update<ı>().SetSource(item).ExecuteAffrows()); + item2 = g.msaccess.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo"; + var repo = g.msaccess.GetRepository<ı>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.msaccess.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.msaccess.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); } class ı { diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs index f98d084c..ad7efc27 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs @@ -52,6 +52,28 @@ namespace FreeSql.Tests.MySql Assert.NotNull(item2); Assert.Equal(item., item2.); Assert.Equal(item., item2.); + + item.22 = "Ա"; + Assert.Equal(1, g.mysql.Update<ı2>().SetSource(item).ExecuteAffrows()); + item2 = g.mysql.Select<ı2>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item.22, item2.22); + + item.22 = "Ա_repo"; + var repo = g.mysql.GetRepository<ı2>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.mysql.Select<ı2>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item.22, item2.22); + + item.22 = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.mysql.Select<ı2>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item.22, item2.22); } class ı2 { @@ -60,6 +82,8 @@ namespace FreeSql.Tests.MySql public string { get; protected set; } + public string 22 { get; set; } + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] public DateTime ʱ { get; protected set; } @@ -68,7 +92,7 @@ namespace FreeSql.Tests.MySql public static ı2 Create(string title, DateTime ctm) { - return new ı2 { = title, ʱ = ctm }; + return new ı2 { = title, 22 = title, ʱ = ctm }; } } diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleCodeFirstTest.cs index d1ae51d2..f1eeab72 100644 --- a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleCodeFirstTest.cs @@ -28,6 +28,28 @@ namespace FreeSql.Tests.Oracle Assert.NotNull(item2); Assert.Equal(item., item2.); Assert.Equal(item., item2.); + + item. = "Ա"; + Assert.Equal(1, g.oracle.Update<ı>().SetSource(item).ExecuteAffrows()); + item2 = g.oracle.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo"; + var repo = g.oracle.GetRepository<ı>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.oracle.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.oracle.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); } class ı { diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs index c2a92151..5db7074a 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs @@ -35,6 +35,28 @@ namespace FreeSql.Tests.PostgreSQL Assert.NotNull(item2); Assert.Equal(item., item2.); Assert.Equal(item., item2.); + + item. = "Ա"; + Assert.Equal(1, g.pgsql.Update<ı>().SetSource(item).ExecuteAffrows()); + item2 = g.pgsql.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo"; + var repo = g.pgsql.GetRepository<ı>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.pgsql.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.pgsql.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); } class ı { diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerCodeFirstTest.cs index 2566b4ec..b86c0e2f 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerCodeFirstTest.cs @@ -29,6 +29,28 @@ namespace FreeSql.Tests.SqlServer Assert.NotNull(item2); Assert.Equal(item., item2.); Assert.Equal(item., item2.); + + item. = "Ա"; + Assert.Equal(1, g.sqlserver.Update<ı>().SetSource(item).ExecuteAffrows()); + item2 = g.sqlserver.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo"; + var repo = g.sqlserver.GetRepository<ı>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.sqlserver.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.sqlserver.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); } class ı { diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteCodeFirstTest.cs index 9eb09d80..1d48cb21 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteCodeFirstTest.cs @@ -56,6 +56,28 @@ namespace FreeSql.Tests.Sqlite Assert.NotNull(item2); Assert.Equal(item., item2.); Assert.Equal(item., item2.); + + item. = "Ա"; + Assert.Equal(1, g.sqlite.Update<ı>().SetSource(item).ExecuteAffrows()); + item2 = g.sqlite.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo"; + var repo = g.sqlite.GetRepository<ı>(); + Assert.Equal(1, repo.Update(item)); + item2 = g.sqlite.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); + + item. = "Ա_repo22"; + Assert.Equal(1, repo.Update(item)); + item2 = g.sqlite.Select<ı>().Where(a => a. == item.).First(); + Assert.NotNull(item2); + Assert.Equal(item., item2.); + Assert.Equal(item., item2.); } class ı { diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs index 8d1d11fe..c468a7a7 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs @@ -57,6 +57,14 @@ namespace FreeSql.Tests .Any()) .ToSql(a => a.Name); + sql = context.Songs + .Where(a => + context.Authors + .Select //加上这句就不报错,不加上报 variable 'a' of type 'Song' referenced from scope '', but it is not defined + .Where(b => b.SongId == a.Id) + .Any()) + .ToSql(a => a.Name); + //using (var conn = new SqlConnection("Data Source=.;Integrated Security=True;Initial Catalog=webchat-abc;Pooling=true;Max Pool Size=13")) //{ // conn.Open(); diff --git a/FreeSql/Extensions/EntityUtilExtensions.cs b/FreeSql/Extensions/EntityUtilExtensions.cs index 7ec6cc31..044fd446 100644 --- a/FreeSql/Extensions/EntityUtilExtensions.cs +++ b/FreeSql/Extensions/EntityUtilExtensions.cs @@ -553,20 +553,31 @@ namespace FreeSql.Extensions.EntityUtil { if (_table.ColumnsByCs.TryGetValue(prop.Name, out var trycol) == false) continue; exps.Add( - Expression.IfThenElse( - Expression.Equal( - Expression.MakeMemberAccess(var1Parm, prop), - Expression.MakeMemberAccess(var2Parm, prop) - ), + trycol.Attribute.CanUpdate == false ? Expression.IfThen( Expression.IsTrue(parm3), Expression.Call(var1Ret, typeof(List).GetMethod("Add", new Type[] { typeof(string) }), Expression.Constant(trycol.Attribute.Name)) - ), - Expression.IfThen( - Expression.IsFalse(parm3), - Expression.Call(var1Ret, typeof(List).GetMethod("Add", new Type[] { typeof(string) }), Expression.Constant(trycol.Attribute.Name)) + ) : ( + trycol.Attribute.CanUpdate && string.IsNullOrEmpty(trycol.DbUpdateValue) == false ? + Expression.IfThen( + Expression.IsFalse(parm3), + Expression.Call(var1Ret, typeof(List).GetMethod("Add", new Type[] { typeof(string) }), Expression.Constant(trycol.Attribute.Name)) + ) : + Expression.IfThenElse( + Expression.Equal( + Expression.MakeMemberAccess(var1Parm, prop), + Expression.MakeMemberAccess(var2Parm, prop) + ), + Expression.IfThen( + Expression.IsTrue(parm3), + Expression.Call(var1Ret, typeof(List).GetMethod("Add", new Type[] { typeof(string) }), Expression.Constant(trycol.Attribute.Name)) + ), + Expression.IfThen( + Expression.IsFalse(parm3), + Expression.Call(var1Ret, typeof(List).GetMethod("Add", new Type[] { typeof(string) }), Expression.Constant(trycol.Attribute.Name)) + ) + ) ) - ) ); a++; }