diff --git a/FreeSql/Extensions/EntityUtilExtensions.cs b/FreeSql/Extensions/EntityUtilExtensions.cs index 1ae14635..f19461ca 100644 --- a/FreeSql/Extensions/EntityUtilExtensions.cs +++ b/FreeSql/Extensions/EntityUtilExtensions.cs @@ -43,9 +43,7 @@ namespace FreeSql.Extensions.EntityUtil { for (var a = 0; a < pks.Length; a++) { var isguid = pks[a].CsType.NullableTypeOrThis() == typeof(Guid); Expression expthen = null; - if (isguid == false) - expthen = Expression.Assign(var3IsNull, Expression.Constant(true)); - else { + if (isguid) { expthen = Expression.Block( new Expression[]{ Expression.Assign(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), Expression.Call(MethodFreeUtilNewMongodbId)), @@ -55,6 +53,17 @@ namespace FreeSql.Extensions.EntityUtil { ) }.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() + ); + } else { + expthen = Expression.Assign(var3IsNull, Expression.Constant(true)); } if (pks[a].Attribute.IsIdentity || isguid || pks[a].CsType == typeof(string) || pks[a].CsType.IsNullableType()) { exps.Add( diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index efc5fb9a..25b00489 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.5.1.3 + 0.5.2 true YeXiangQin FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite. diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs index 556e02aa..4567ea98 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs @@ -323,6 +323,8 @@ namespace FreeSql.Internal.CommonProvider { isclose = true; } cmd.Connection = connection; + if (transaction.Connection == connection) + cmd.Transaction = transaction; } if (IsTracePerformance) dt = DateTime.Now;