mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +08:00
codefirst 根据代码注释,迁移到数据库备注
This commit is contained in:
parent
38d51a809d
commit
5ce51bc310
@ -6,6 +6,10 @@
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DocumentationFile>FreeSql.Tests.xml</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FreeSql.DbContext" Version="0.6.4.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.8" />
|
||||
|
198
FreeSql.Tests/FreeSql.Tests.xml
Normal file
198
FreeSql.Tests/FreeSql.Tests.xml
Normal file
@ -0,0 +1,198 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>FreeSql.Tests</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="M:FreeSql.Tests.MySql.MySqlCodeFirstTest.Tb_alltype.Save">
|
||||
<summary>
|
||||
保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:FreeSql.Tests.UnitTest1.NewsArticle">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.ArticleId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.ArticleTitle">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.CategoryId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.ChannelId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.TypeId">
|
||||
<summary>
|
||||
类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.Summary">
|
||||
<summary>
|
||||
内容简介
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.Thumbnail">
|
||||
<summary>
|
||||
缩略图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.Hits">
|
||||
<summary>
|
||||
点击量
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.IsDisplay">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.Status">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.CreateTime">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.ReleaseTime">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.Templates.Id">
|
||||
<summary>
|
||||
主键,ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:FreeSql.Tests.ExamPaper">
|
||||
<summary>
|
||||
试卷表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.ExamPaper.AssessmentPlanId">
|
||||
<summary>
|
||||
考核计划ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.ExamPaper.TotalScore">
|
||||
<summary>
|
||||
总分
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModulePermission.SysModulePermissionId">
|
||||
<summary>
|
||||
菜单权限ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModulePermission.SysModuleId">
|
||||
<summary>
|
||||
菜单主键ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModulePermission.SysModuleButtonId">
|
||||
<summary>
|
||||
按钮主键ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModulePermission.Status">
|
||||
<summary>
|
||||
菜单权限
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.SysModuleId">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.ParentId">
|
||||
<summary>
|
||||
父级ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.Name">
|
||||
<summary>
|
||||
名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.Icon">
|
||||
<summary>
|
||||
图标
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.UrlAddress">
|
||||
<summary>
|
||||
链接地址
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.IsShow">
|
||||
<summary>
|
||||
是否公开
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.Sort">
|
||||
<summary>
|
||||
排序
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.Description">
|
||||
<summary>
|
||||
备注
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.CreateTime">
|
||||
<summary>
|
||||
创建日期
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.SysModuleButtonId">
|
||||
<summary>
|
||||
按钮主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.Name">
|
||||
<summary>
|
||||
名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.EventName">
|
||||
<summary>
|
||||
事件名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.EnCode">
|
||||
<summary>
|
||||
编码
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.Icon">
|
||||
<summary>
|
||||
图标
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.Sort">
|
||||
<summary>
|
||||
排序
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.CreateTime">
|
||||
<summary>
|
||||
创建日期
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
@ -231,6 +231,9 @@ namespace FreeSql.Tests {
|
||||
public virtual TaskBuild TaskBuild { get; set; }
|
||||
}
|
||||
public class Templates {
|
||||
/// <summary>
|
||||
/// 主键,ID
|
||||
/// </summary>
|
||||
[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<Templates>().ToList();
|
||||
|
||||
|
||||
|
||||
var testaddlist = new List<NewsArticle>();
|
||||
for(var a = 0; a < 133905; a++) {
|
||||
testaddlist.Add(new NewsArticle {
|
||||
|
198
FreeSql.Tests/ftTests.xml
Normal file
198
FreeSql.Tests/ftTests.xml
Normal file
@ -0,0 +1,198 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>FreeSql.Tests</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="M:FreeSql.Tests.MySql.MySqlCodeFirstTest.Tb_alltype.Save">
|
||||
<summary>
|
||||
保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:FreeSql.Tests.UnitTest1.NewsArticle">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.ArticleId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.ArticleTitle">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.CategoryId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.ChannelId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.TypeId">
|
||||
<summary>
|
||||
类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.Summary">
|
||||
<summary>
|
||||
内容简介
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.Thumbnail">
|
||||
<summary>
|
||||
缩略图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.Hits">
|
||||
<summary>
|
||||
点击量
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.IsDisplay">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.Status">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.CreateTime">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.NewsArticle.ReleaseTime">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest1.Templates.Id">
|
||||
<summary>
|
||||
主键,ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:FreeSql.Tests.ExamPaper">
|
||||
<summary>
|
||||
试卷表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.ExamPaper.AssessmentPlanId">
|
||||
<summary>
|
||||
考核计划ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.ExamPaper.TotalScore">
|
||||
<summary>
|
||||
总分
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModulePermission.SysModulePermissionId">
|
||||
<summary>
|
||||
菜单权限ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModulePermission.SysModuleId">
|
||||
<summary>
|
||||
菜单主键ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModulePermission.SysModuleButtonId">
|
||||
<summary>
|
||||
按钮主键ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModulePermission.Status">
|
||||
<summary>
|
||||
菜单权限
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.SysModuleId">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.ParentId">
|
||||
<summary>
|
||||
父级ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.Name">
|
||||
<summary>
|
||||
名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.Icon">
|
||||
<summary>
|
||||
图标
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.UrlAddress">
|
||||
<summary>
|
||||
链接地址
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.IsShow">
|
||||
<summary>
|
||||
是否公开
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.Sort">
|
||||
<summary>
|
||||
排序
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.Description">
|
||||
<summary>
|
||||
备注
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModule.CreateTime">
|
||||
<summary>
|
||||
创建日期
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.SysModuleButtonId">
|
||||
<summary>
|
||||
按钮主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.Name">
|
||||
<summary>
|
||||
名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.EventName">
|
||||
<summary>
|
||||
事件名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.EnCode">
|
||||
<summary>
|
||||
编码
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.Icon">
|
||||
<summary>
|
||||
图标
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.Sort">
|
||||
<summary>
|
||||
排序
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.SysModuleButton.CreateTime">
|
||||
<summary>
|
||||
创建日期
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
@ -2270,6 +2270,13 @@
|
||||
<param name="database"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.CommonUtils.GetProperyCommentBySummary(System.Type)">
|
||||
<summary>
|
||||
通过属性的注释文本,通过 xml 读取
|
||||
</summary>
|
||||
<param name="type"></param>
|
||||
<returns>Dict:key=属性名,value=注释</returns>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.Model.TableRef.RefMiddleEntityType">
|
||||
<summary>
|
||||
中间表,多对多
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 通过属性的注释文本,通过 xml 读取
|
||||
/// </summary>
|
||||
/// <param name="type"></param>
|
||||
/// <returns>Dict:key=属性名,value=注释</returns>
|
||||
public static Dictionary<string, string> GetProperyCommentBySummary(Type type) {
|
||||
var xmlPath = type.Assembly.Location.Replace(".dll", ".xml");
|
||||
if (File.Exists(xmlPath) == false) return null;
|
||||
|
||||
var dic = new Dictionary<string, string>();
|
||||
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<DbConnection> pool, int minPoolSize) {
|
||||
if (minPoolSize <= 0) minPoolSize = Math.Min(5, pool.Policy.PoolSize);
|
||||
if (minPoolSize > pool.Policy.PoolSize) minPoolSize = pool.Policy.PoolSize;
|
||||
|
@ -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<ColumnInfo, Func<object, object>> _dicGetMapValue = new ConcurrentDictionary<ColumnInfo, Func<object, object>>();
|
||||
public object GetMapValue(object obj) {
|
||||
|
@ -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<PropertyInfo>();
|
||||
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;
|
||||
|
@ -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()) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user