From 3ca91b70a9345c66132b73001d92f824650d3a49 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Sat, 30 Mar 2019 19:51:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20FreeSql.DbContext=20?= =?UTF-8?q?=E5=BD=93=E6=8F=92=E5=85=A5=E5=AE=9E=E4=BD=93=E5=B8=A6=20Guid?= =?UTF-8?q?=20=E4=B8=BB=E9=94=AE=E6=97=A0=E5=80=BC=E6=97=B6=E5=80=99?= =?UTF-8?q?=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/DbSet/DbSetAsync.cs | 4 ++-- FreeSql.DbContext/DbSet/DbSetSync.cs | 4 ++-- FreeSql/Extensions/EntityUtilExtensions.cs | 20 ++++++++++++++++++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index ab443e38..c17c0724 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -89,8 +89,8 @@ namespace FreeSql { } } else { //进入队列,等待 SaveChanges 时执行 - foreach (var s in data) - EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(s)); + foreach (var item in data) + EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(item)); } } #endregion diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 63c6c881..95697bef 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -87,8 +87,8 @@ namespace FreeSql { } } else { //进入队列,等待 SaveChanges 时执行 - foreach (var s in data) - EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(s)); + foreach (var item in data) + EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(item)); } } #endregion diff --git a/FreeSql/Extensions/EntityUtilExtensions.cs b/FreeSql/Extensions/EntityUtilExtensions.cs index f9477512..2c835770 100644 --- a/FreeSql/Extensions/EntityUtilExtensions.cs +++ b/FreeSql/Extensions/EntityUtilExtensions.cs @@ -13,10 +13,11 @@ namespace FreeSql.Extensions.EntityUtil { static MethodInfo MethodStringBuilderToString = typeof(StringBuilder).GetMethod("ToString", new Type[0]); static PropertyInfo MethodStringBuilderLength = typeof(StringBuilder).GetProperty("Length"); static MethodInfo MethodStringConcat = typeof(string).GetMethod("Concat", new Type[] { typeof(object) }); + static MethodInfo MethodFreeUtilNewMongodbId = typeof(FreeUtil).GetMethod("NewMongodbId"); static ConcurrentDictionary>> _dicGetEntityKeyString = new ConcurrentDictionary>>(); /// - /// 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值,返回 null + /// 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时(当Guid无值时,会生成有序的新值),返回 null /// /// /// @@ -37,12 +38,27 @@ namespace FreeSql.Extensions.EntityUtil { Expression.Assign(var3IsNull, Expression.Constant(false)) }); 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 { + 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() + ); + } exps.Add( Expression.IfThen( Expression.IsFalse(var3IsNull), Expression.IfThenElse( Expression.Equal(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), Expression.Default(pks[a].CsType)), - Expression.Assign(var3IsNull, Expression.Constant(true)), + expthen, Expression.Block( new Expression[]{ a > 0 ? Expression.Call(var2Sb, MethodStringBuilderAppend, Expression.Constant(splitString)) : null,