From a189b6abba0778189465032da13029c4a43a0b6a Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Mon, 4 Mar 2019 20:45:19 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=E6=8F=92=E5=85=A5?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E4=B8=BB=E9=94=AE=EF=BC=8C=E4=B8=94=E4=B8=BA?= =?UTF-8?q?=20Guid/Guid=3F=20=E7=B1=BB=E5=9E=8B=EF=BC=8C=E5=B9=B6=E4=B8=94?= =?UTF-8?q?=E5=80=BC=E4=B8=BA=20null/Guid.Empty=20=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=B0=86=E6=8F=92=E5=85=A5=E7=9A=84=E5=80=BC=E5=8F=98=E4=B8=BA?= =?UTF-8?q?=20FreeUtil.NewMongodbId()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql.Tests/Sqlite/SqliteCodeFirstTest.cs | 9 +++------ FreeSql/FreeSql.csproj | 2 +- FreeSql/Internal/CommonProvider/InsertProvider.cs | 8 +++++++- FreeSql/Internal/UtilsExpressionTree.cs | 10 +++++----- FreeSql/Oracle/Curd/OracleInsert.cs | 8 +++++++- 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 271b98df..cc65e234 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.1.7 + 0.1.9 YeXiangQin FreeSql 通用仓库层实现,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。 https://github.com/2881099/FreeSql diff --git a/FreeSql.Tests/Sqlite/SqliteCodeFirstTest.cs b/FreeSql.Tests/Sqlite/SqliteCodeFirstTest.cs index 5cac46fc..e7bb1475 100644 --- a/FreeSql.Tests/Sqlite/SqliteCodeFirstTest.cs +++ b/FreeSql.Tests/Sqlite/SqliteCodeFirstTest.cs @@ -35,9 +35,7 @@ namespace FreeSql.Tests.Sqlite { var commentRepository = g.sqlite.GetGuidRepository(); //Ӳ - var topicId = FreeUtil.NewMongodbId(); - topicRepository.Insert(new Topic { - Id = FreeUtil.NewMongodbId(), + var topic = topicRepository.Insert(new Topic { Title = "±1", Content = "1", CreateTime = DateTime.Now @@ -45,12 +43,11 @@ namespace FreeSql.Tests.Sqlite { //10 var comments = Enumerable.Range(0, 10).Select(a => new Comment { - Id = FreeUtil.NewMongodbId(), - TopicId = topicId, + TopicId = topic.Id, Nickname = $"dz{a}", Content = $"{a}", CreateTime = DateTime.Now - }); + }).ToArray(); var affrows = commentRepository.Insert(comments); var find = commentRepository.Select.Where(a => a.Topic.Title == "±1").ToList(); diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 8e9bf6d0..a93f4d20 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.1.7 + 0.1.9 true YeXiangQin 打造 .NETCore 最方便的 ORM,DbFirst 与 CodeFirst 混合使用,提供从实体同步数据库,或者从数据库生成实体代码,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。 diff --git a/FreeSql/Internal/CommonProvider/InsertProvider.cs b/FreeSql/Internal/CommonProvider/InsertProvider.cs index 454aaa7f..1003a04a 100644 --- a/FreeSql/Internal/CommonProvider/InsertProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertProvider.cs @@ -80,7 +80,13 @@ namespace FreeSql.Internal.CommonProvider { if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) { if (colidx2 > 0) sb.Append(", "); sb.Append(_commonUtils.QuoteWriteParamter(col.CsType, $"{_commonUtils.QuoteParamterName(col.CsName)}{didx}")); - _params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}{didx}", col.CsType, _table.Properties.TryGetValue(col.CsName, out var tryp) ? tryp.GetValue(d) : null); + object val = null; + if (_table.Properties.TryGetValue(col.CsName, out var tryp)) { + val = tryp.GetValue(d); + if (col.Attribute.IsPrimary && (col.CsType == typeof(Guid) || col.CsType == typeof(Guid?)) + && (val == null || (Guid)val == Guid.Empty)) tryp.SetValue(d, val = FreeUtil.NewMongodbId()); + } + _params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}{didx}", col.CsType, val); ++colidx2; } sb.Append(")"); diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index d9fff178..04806f9f 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -113,14 +113,14 @@ namespace FreeSql.Internal { } trytb.Primarys = trytb.Columns.Values.Where(a => a.Attribute.IsPrimary == true).ToArray(); if (trytb.Primarys.Any() == false) { - trytb.Primarys = trytb.Columns.Values.Where(a => string.Compare(a.Attribute.Name, "id", true) == 0).ToArray(); + var identcols = trytb.Columns.Values.Where(a => a.Attribute.IsIdentity == true).FirstOrDefault(); + if (identcols != null) trytb.Primarys = new[] { identcols }; if (trytb.Primarys.Any() == false) { - trytb.Primarys = trytb.Columns.Values.Where(a => string.Compare(a.Attribute.Name, $"{trytb.DbName}id", true) == 0).ToArray(); + trytb.Primarys = trytb.Columns.Values.Where(a => string.Compare(a.Attribute.Name, "id", true) == 0).ToArray(); if (trytb.Primarys.Any() == false) { - trytb.Primarys = trytb.Columns.Values.Where(a => string.Compare(a.Attribute.Name, $"{trytb.DbName}_id", true) == 0).ToArray(); + trytb.Primarys = trytb.Columns.Values.Where(a => string.Compare(a.Attribute.Name, $"{trytb.DbName}id", true) == 0).ToArray(); if (trytb.Primarys.Any() == false) { - var identcols = trytb.Columns.Values.Where(a => a.Attribute.IsIdentity == true).FirstOrDefault(); - if (identcols != null) trytb.Primarys = new[] { identcols }; + trytb.Primarys = trytb.Columns.Values.Where(a => string.Compare(a.Attribute.Name, $"{trytb.DbName}_id", true) == 0).ToArray(); } } } diff --git a/FreeSql/Oracle/Curd/OracleInsert.cs b/FreeSql/Oracle/Curd/OracleInsert.cs index 8b0a2dd9..677417f9 100644 --- a/FreeSql/Oracle/Curd/OracleInsert.cs +++ b/FreeSql/Oracle/Curd/OracleInsert.cs @@ -52,7 +52,13 @@ namespace FreeSql.Oracle.Curd { if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) { if (colidx2 > 0) sb.Append(", "); sb.Append(_commonUtils.QuoteWriteParamter(col.CsType, $"{_commonUtils.QuoteParamterName(col.CsName)}{didx}")); - _params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}{didx}", col.CsType, _table.Properties.TryGetValue(col.CsName, out var tryp) ? tryp.GetValue(d) : null); + object val = null; + if (_table.Properties.TryGetValue(col.CsName, out var tryp)) { + val = tryp.GetValue(d); + if (col.Attribute.IsPrimary && (col.CsType == typeof(Guid) || col.CsType == typeof(Guid?)) + && (val == null || (Guid)val == Guid.Empty)) tryp.SetValue(d, val = FreeUtil.NewMongodbId()); + } + _params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}{didx}", col.CsType, val); ++colidx2; } }