From cf0dfae545b8d7acdbf6120d93eefa8ed0d3f685 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Tue, 8 Oct 2019 15:43:34 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20FreeSql.DbContext/Free?= =?UTF-8?q?Sql.Repository=20=E5=BD=93=E4=B8=BB=E9=94=AE=E4=B8=BA=20Guid=3F?= =?UTF-8?q?=20=E5=8F=AF=E7=A9=BA=E7=B1=BB=E5=9E=8B=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=8F=91=E7=94=9F=E5=8F=82=E6=95=B0=E9=94=99=E8=AF=AF=EF=BC=9B?= =?UTF-8?q?#105=20#106=20>=20System.ArgumentException:=E2=80=9CExpression?= =?UTF-8?q?=20of=20type=20'System.Guid'=20cannot=20be=20used=20for=20assig?= =?UTF-8?q?nment=20to=20type=20'System.Nullable`1[System.Guid]'=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/FreeSql.Tests/UnitTest1.cs | 46 ++++++++++++++++++++ FreeSql/Extensions/EntityUtilExtensions.cs | 50 ++++++++-------------- 2 files changed, 65 insertions(+), 31 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs index 0d2dfc44..13ed35bc 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs @@ -403,10 +403,56 @@ namespace FreeSql.Tests [Navigate("AuthorId")] public List Post { get; set; } } + public class TestGuidId + { + public Guid? Id { get; set; } + public string xxx { get; set; } + } [Fact] public void Test1() { + g.sqlite.Insert(new TestGuidId { xxx = "111" }).ExecuteAffrows(); + g.sqlite.Insert(new TestGuidId { xxx = "222" }).ExecuteAffrows(); + var gkkdk1 = g.sqlite.Select().Where(a => true).ToList(); + using (var testguididdb = g.sqlite.CreateDbContext()) + { + var gkkdk11 = testguididdb.Set().Select.Where(a => true).ToList(); + } + + g.oracle.Insert(new TestGuidId { xxx = "111" }).ExecuteAffrows(); + g.oracle.Insert(new TestGuidId { xxx = "222" }).ExecuteAffrows(); + var gkkdk2 = g.oracle.Select().Where(a => true).ToList(); + using (var testguididdb = g.sqlite.CreateDbContext()) + { + var gkkdk22 = testguididdb.Set().Select.Where(a => true).ToList(); + } + + g.pgsql.Insert(new TestGuidId { xxx = "111" }).ExecuteAffrows(); + g.pgsql.Insert(new TestGuidId { xxx = "222" }).ExecuteAffrows(); + var gkkdk3 = g.pgsql.Select().Where(a => true).ToList(); + using (var testguididdb = g.sqlite.CreateDbContext()) + { + var gkkdk22 = testguididdb.Set().Select.Where(a => true).ToList(); + } + + g.mysql.Insert(new TestGuidId { xxx = "111" }).ExecuteAffrows(); + g.mysql.Insert(new TestGuidId { xxx = "222" }).ExecuteAffrows(); + var gkkdk4 = g.mysql.Select().Where(a => true).ToList(); + using (var testguididdb = g.sqlite.CreateDbContext()) + { + var gkkdk22 = testguididdb.Set().Select.Where(a => true).ToList(); + } + + g.sqlserver.Insert(new TestGuidId { xxx = "111" }).ExecuteAffrows(); + g.sqlserver.Insert(new TestGuidId { xxx = "222" }).ExecuteAffrows(); + var gkkdk5 = g.sqlserver.Select().Where(a => true).ToList(); + using (var testguididdb = g.sqlite.CreateDbContext()) + { + var gkkdk22 = testguididdb.Set().Select.Where(a => true).ToList(); + } + + var testlistinsert = new List(); g.sqlite.Insert(testlistinsert).ExecuteAffrows(); diff --git a/FreeSql/Extensions/EntityUtilExtensions.cs b/FreeSql/Extensions/EntityUtilExtensions.cs index 98ab49e7..7ec6cc31 100644 --- a/FreeSql/Extensions/EntityUtilExtensions.cs +++ b/FreeSql/Extensions/EntityUtilExtensions.cs @@ -53,41 +53,29 @@ namespace FreeSql.Extensions.EntityUtil Expression expthen = null; if (isguid) { - if (pks[a].Attribute.MapType == pks[a].CsType) - { - expthen = Expression.Block( - new Expression[]{ - Expression.Assign(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), Expression.Call(MethodFreeUtilNewMongodbId)), - a > 0 ? Expression.Call(var2Sb, MethodStringBuilderAppend, Expression.Constant(splitString)) : null, - Expression.Call(var2Sb, MethodStringBuilderAppend, - Expression.Convert(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), typeof(object)) - ) - }.Where(c => c != null).ToArray() - ); - } - else - { - expthen = Expression.Block( - new Expression[]{ - Expression.Assign(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), FreeSql.Internal.Utils.GetDataReaderValueBlockExpression(pks[a].CsType, Expression.Call(MethodFreeUtilNewMongodbId))), - a > 0 ? Expression.Call(var2Sb, MethodStringBuilderAppend, Expression.Constant(splitString)) : null, - Expression.Call(var2Sb, MethodStringBuilderAppend, - Expression.Convert(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), typeof(object)) - ) - }.Where(c => c != null).ToArray() - ); - } + Expression newguid = Expression.Call(MethodFreeUtilNewMongodbId); + if (pks[a].Attribute.MapType != pks[a].CsType) newguid = FreeSql.Internal.Utils.GetDataReaderValueBlockExpression(pks[a].CsType, newguid); + if (pks[a].CsType == typeof(Guid?)) newguid = Expression.Convert(newguid, typeof(Guid?)); + expthen = Expression.Block( + new Expression[]{ + Expression.Assign(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), newguid), + a > 0 ? Expression.Call(var2Sb, MethodStringBuilderAppend, Expression.Constant(splitString)) : null, + Expression.Call(var2Sb, MethodStringBuilderAppend, + Expression.Convert(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), typeof(object)) + ) + }.Where(c => c != null).ToArray() + ); } else if (pks.Length > 1 && pks[a].Attribute.IsIdentity) { expthen = Expression.Block( - new Expression[]{ - a > 0 ? Expression.Call(var2Sb, MethodStringBuilderAppend, Expression.Constant(splitString)) : null, - Expression.Call(var2Sb, MethodStringBuilderAppend, - Expression.Convert(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), typeof(object)) - ) - }.Where(c => c != null).ToArray() - ); + new Expression[]{ + a > 0 ? Expression.Call(var2Sb, MethodStringBuilderAppend, Expression.Constant(splitString)) : null, + Expression.Call(var2Sb, MethodStringBuilderAppend, + Expression.Convert(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), typeof(object)) + ) + }.Where(c => c != null).ToArray() + ); } else {