From 5ce51bc31041f7413e78d09a969476c33ff85e4f Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Fri, 14 Jun 2019 18:14:14 +0800
Subject: [PATCH] =?UTF-8?q?codefirst=20=E6=A0=B9=E6=8D=AE=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81=E6=B3=A8=E9=87=8A=EF=BC=8C=E8=BF=81=E7=A7=BB=E5=88=B0?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=A4=87=E6=B3=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.Tests/FreeSql.Tests.csproj | 4 +
FreeSql.Tests/FreeSql.Tests.xml | 198 ++++++++++++++++++
FreeSql.Tests/UnitTest1.cs | 7 +
FreeSql.Tests/ftTests.xml | 198 ++++++++++++++++++
FreeSql/FreeSql.xml | 7 +
FreeSql/Internal/CommonUtils.cs | 33 +++
FreeSql/Internal/Model/ColumnInfo.cs | 1 +
FreeSql/Internal/UtilsExpressionTree.cs | 3 +
.../FreeSql.Provider.MySql/MySqlCodeFirst.cs | 1 +
9 files changed, 452 insertions(+)
create mode 100644 FreeSql.Tests/FreeSql.Tests.xml
create mode 100644 FreeSql.Tests/ftTests.xml
diff --git a/FreeSql.Tests/FreeSql.Tests.csproj b/FreeSql.Tests/FreeSql.Tests.csproj
index 9370e56c..27134387 100644
--- a/FreeSql.Tests/FreeSql.Tests.csproj
+++ b/FreeSql.Tests/FreeSql.Tests.csproj
@@ -6,6 +6,10 @@
false
+
+ FreeSql.Tests.xml
+
+
diff --git a/FreeSql.Tests/FreeSql.Tests.xml b/FreeSql.Tests/FreeSql.Tests.xml
new file mode 100644
index 00000000..55568931
--- /dev/null
+++ b/FreeSql.Tests/FreeSql.Tests.xml
@@ -0,0 +1,198 @@
+
+
+
+ FreeSql.Tests
+
+
+
+
+ 保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 类型
+
+
+
+
+ 内容简介
+
+
+
+
+ 缩略图
+
+
+
+
+ 点击量
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 主键,ID
+
+
+
+
+ 试卷表
+
+
+
+
+ 考核计划ID
+
+
+
+
+ 总分
+
+
+
+
+ 菜单权限ID
+
+
+
+
+ 菜单主键ID
+
+
+
+
+ 按钮主键ID
+
+
+
+
+ 菜单权限
+
+
+
+
+ 主键
+
+
+
+
+ 父级ID
+
+
+
+
+ 名称
+
+
+
+
+ 图标
+
+
+
+
+ 链接地址
+
+
+
+
+ 是否公开
+
+
+
+
+ 排序
+
+
+
+
+ 备注
+
+
+
+
+ 创建日期
+
+
+
+
+ 按钮主键
+
+
+
+
+ 名称
+
+
+
+
+ 事件名称
+
+
+
+
+ 编码
+
+
+
+
+ 图标
+
+
+
+
+ 排序
+
+
+
+
+ 创建日期
+
+
+
+
diff --git a/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/UnitTest1.cs
index ea48b4ca..54d3e0d6 100644
--- a/FreeSql.Tests/UnitTest1.cs
+++ b/FreeSql.Tests/UnitTest1.cs
@@ -231,6 +231,9 @@ namespace FreeSql.Tests {
public virtual TaskBuild TaskBuild { get; set; }
}
public class Templates {
+ ///
+ /// 主键,ID
+ ///
[Column(IsPrimary = true)]
public Guid Id { get; set; }
public string Title { get; set; }
@@ -267,6 +270,10 @@ namespace FreeSql.Tests {
[Fact]
public void Test1() {
+ var dkdkdkd = g.mysql.Select().ToList();
+
+
+
var testaddlist = new List();
for(var a = 0; a < 133905; a++) {
testaddlist.Add(new NewsArticle {
diff --git a/FreeSql.Tests/ftTests.xml b/FreeSql.Tests/ftTests.xml
new file mode 100644
index 00000000..55568931
--- /dev/null
+++ b/FreeSql.Tests/ftTests.xml
@@ -0,0 +1,198 @@
+
+
+
+ FreeSql.Tests
+
+
+
+
+ 保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 类型
+
+
+
+
+ 内容简介
+
+
+
+
+ 缩略图
+
+
+
+
+ 点击量
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 主键,ID
+
+
+
+
+ 试卷表
+
+
+
+
+ 考核计划ID
+
+
+
+
+ 总分
+
+
+
+
+ 菜单权限ID
+
+
+
+
+ 菜单主键ID
+
+
+
+
+ 按钮主键ID
+
+
+
+
+ 菜单权限
+
+
+
+
+ 主键
+
+
+
+
+ 父级ID
+
+
+
+
+ 名称
+
+
+
+
+ 图标
+
+
+
+
+ 链接地址
+
+
+
+
+ 是否公开
+
+
+
+
+ 排序
+
+
+
+
+ 备注
+
+
+
+
+ 创建日期
+
+
+
+
+ 按钮主键
+
+
+
+
+ 名称
+
+
+
+
+ 事件名称
+
+
+
+
+ 编码
+
+
+
+
+ 图标
+
+
+
+
+ 排序
+
+
+
+
+ 创建日期
+
+
+
+
diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml
index 77e52249..e59d286f 100644
--- a/FreeSql/FreeSql.xml
+++ b/FreeSql/FreeSql.xml
@@ -2270,6 +2270,13 @@
+
+
+ 通过属性的注释文本,通过 xml 读取
+
+
+ Dict:key=属性名,value=注释
+
中间表,多对多
diff --git a/FreeSql/Internal/CommonUtils.cs b/FreeSql/Internal/CommonUtils.cs
index c2510bf5..c16f0104 100644
--- a/FreeSql/Internal/CommonUtils.cs
+++ b/FreeSql/Internal/CommonUtils.cs
@@ -8,11 +8,14 @@ using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data.Common;
+using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
+using System.Xml;
+using System.Xml.XPath;
namespace FreeSql.Internal {
public abstract class CommonUtils {
@@ -239,6 +242,36 @@ namespace FreeSql.Internal {
return iidx == 1 ? sb.Remove(0, 5).Remove(sb.Length - 1, 1).ToString() : sb.Remove(0, 4).ToString();
}
+ ///
+ /// 通过属性的注释文本,通过 xml 读取
+ ///
+ ///
+ /// Dict:key=属性名,value=注释
+ public static Dictionary GetProperyCommentBySummary(Type type) {
+ var xmlPath = type.Assembly.Location.Replace(".dll", ".xml");
+ if (File.Exists(xmlPath) == false) return null;
+
+ var dic = new Dictionary();
+ var className = type.IsNested ? $"{type.Namespace}.{type.DeclaringType.Name}.{type.Name}" : $"{type.Namespace}.{type.Name}";
+ var sReader = new StringReader(File.ReadAllText(xmlPath));
+ using (var xmlReader = XmlReader.Create(sReader)) {
+ var xpath = new XPathDocument(xmlReader);
+ var xmlNav = xpath.CreateNavigator();
+
+ var props = type.GetProperties();
+ foreach (var prop in props) {
+ var node = xmlNav.SelectSingleNode($"/doc/members/member[@name='P:{className}.{prop.Name}']/summary");
+ if (node == null) continue;
+ var comment = node.InnerXml.Trim(' ', '\r', '\n', '\t');
+ if (string.IsNullOrEmpty(comment)) continue;
+
+ dic.Add(prop.Name, comment);
+ }
+ }
+
+ return dic;
+ }
+
public static void PrevReheatConnectionPool(ObjectPool pool, int minPoolSize) {
if (minPoolSize <= 0) minPoolSize = Math.Min(5, pool.Policy.PoolSize);
if (minPoolSize > pool.Policy.PoolSize) minPoolSize = pool.Policy.PoolSize;
diff --git a/FreeSql/Internal/Model/ColumnInfo.cs b/FreeSql/Internal/Model/ColumnInfo.cs
index 24bfdcd9..fe17b231 100644
--- a/FreeSql/Internal/Model/ColumnInfo.cs
+++ b/FreeSql/Internal/Model/ColumnInfo.cs
@@ -10,6 +10,7 @@ namespace FreeSql.Internal.Model {
public string CsName { get; set; }
public Type CsType { get; set; }
public ColumnAttribute Attribute { get; set; }
+ public string Comment { get; internal set; }
static ConcurrentDictionary> _dicGetMapValue = new ConcurrentDictionary>();
public object GetMapValue(object obj) {
diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs
index 1b38ca9f..1899dcb2 100644
--- a/FreeSql/Internal/UtilsExpressionTree.cs
+++ b/FreeSql/Internal/UtilsExpressionTree.cs
@@ -56,6 +56,7 @@ namespace FreeSql.Internal {
if (tbattr != null) trytb.DisableSyncStructure = tbattr.DisableSyncStructure;
var propsLazy = new List<(PropertyInfo, bool, bool)>();
var propsNavObjs = new List();
+ var propsComment = CommonUtils.GetProperyCommentBySummary(entity);
foreach (var p in trytb.Properties.Values) {
var setMethod = trytb.Type.GetMethod($"set_{p.Name}");
var colattr = common.GetEntityColumnAttribute(entity, p);
@@ -124,6 +125,8 @@ namespace FreeSql.Internal {
CsType = p.PropertyType,
Attribute = colattr
};
+ if (propsComment != null && propsComment.TryGetValue(p.Name, out var trycomment))
+ col.Comment = trycomment;
if (colattr.IsIgnore) {
trytb.ColumnsByCsIgnore.Add(p.Name, col);
continue;
diff --git a/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs b/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs
index 6148c2a0..1c9950c8 100644
--- a/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs
+++ b/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs
@@ -119,6 +119,7 @@ namespace FreeSql.MySql {
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
sb.Append(tbcol.Attribute.DbType);
if (tbcol.Attribute.IsIdentity == true && tbcol.Attribute.DbType.IndexOf("AUTO_INCREMENT", StringComparison.CurrentCultureIgnoreCase) == -1) sb.Append(" AUTO_INCREMENT");
+ if (string.IsNullOrEmpty(tbcol.Comment) == false) sb.Append(" COMMENT ").Append(_commonUtils.FormatSql("{0}", tbcol.Comment));
sb.Append(",");
}
if (tb.Primarys.Any()) {