From cdc0f5f1a08025681f250647b3f65d5e4a4684ba Mon Sep 17 00:00:00 2001
From: falcon <9504402@qq.com>
Date: Thu, 13 Oct 2022 17:22:17 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=9E=E4=BD=93=E5=88=97?=
=?UTF-8?q?=E6=98=A0=E5=B0=84=E5=92=8C=E5=AE=9E=E4=BD=93=E8=A1=A8=E6=98=A0?=
=?UTF-8?q?=E5=B0=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EntityServices/SetupKey.cs | 19 +++++
.../EntityServices/SetupLength.cs | 29 +++++++
.../EntityServices/SetupNullable.cs | 39 ++++++++++
.../EntityServices/TableNameTableService.cs | 19 +++++
.../IEntityColumnServices.cs | 18 +++++
.../IEntityTableServices.cs | 19 +++++
.../SugarConnectionConfig.cs | 76 +++++++------------
Falcon.SugarApi/TypeExtend.cs | 12 +++
8 files changed, 181 insertions(+), 50 deletions(-)
create mode 100644 Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupKey.cs
create mode 100644 Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupLength.cs
create mode 100644 Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupNullable.cs
create mode 100644 Falcon.SugarApi/DatabaseDefinitions/EntityServices/TableNameTableService.cs
create mode 100644 Falcon.SugarApi/DatabaseDefinitions/IEntityColumnServices.cs
create mode 100644 Falcon.SugarApi/DatabaseDefinitions/IEntityTableServices.cs
diff --git a/Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupKey.cs b/Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupKey.cs
new file mode 100644
index 0000000..3a9250f
--- /dev/null
+++ b/Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupKey.cs
@@ -0,0 +1,19 @@
+using SqlSugar;
+using System.ComponentModel.DataAnnotations;
+using System.Reflection;
+
+namespace Falcon.SugarApi.DatabaseDefinitions.EntityServices
+{
+ ///
+ /// 设置主键
+ ///
+ public class SetupKey : IEntityColumnServices
+ {
+ ///
+ public void SetupColumn(PropertyInfo p, EntityColumnInfo c) {
+ if (p.TryGetAttribute(out var _)) {
+ c.IsPrimarykey = true;
+ }
+ }
+ }
+}
diff --git a/Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupLength.cs b/Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupLength.cs
new file mode 100644
index 0000000..732f968
--- /dev/null
+++ b/Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupLength.cs
@@ -0,0 +1,29 @@
+using SqlSugar;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Reflection;
+
+namespace Falcon.SugarApi.DatabaseDefinitions.EntityServices
+{
+ ///
+ /// 设置长度规则
+ ///
+ public class SetupLength : IEntityColumnServices
+ {
+ ///
+ public void SetupColumn(PropertyInfo p, EntityColumnInfo c) {
+ var len = new List();
+ if (p.TryGetAttribute(out var sl)) {
+ len.Add(sl.MaximumLength);
+ }
+ if (p.TryGetAttribute(out var la)) {
+ len.Add(la.Length);
+ }
+ if (p.TryGetAttribute(out var sc) && sc.Length != 0) {
+ len.Add(sc.Length);
+ }
+ c.Length = len.Max();
+ }
+ }
+}
diff --git a/Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupNullable.cs b/Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupNullable.cs
new file mode 100644
index 0000000..07c9c87
--- /dev/null
+++ b/Falcon.SugarApi/DatabaseDefinitions/EntityServices/SetupNullable.cs
@@ -0,0 +1,39 @@
+using SqlSugar;
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.Reflection;
+
+namespace Falcon.SugarApi.DatabaseDefinitions.EntityServices
+{
+ ///
+ /// 设置Nullable
+ ///
+ public class SetupNullable : IEntityColumnServices
+ {
+ ///
+ public void SetupColumn(PropertyInfo p, EntityColumnInfo c) {
+ var pt = p.PropertyType;
+ //所有类型默认可空
+ bool na = true;
+ //字符串默认可空
+ na = pt == typeof(string) ? true : na;
+ //Nullable<>类型可空
+ if (pt.IsGenericType && pt.GetGenericTypeDefinition() == typeof(Nullable<>)) {
+ na = true;
+ }
+ //RequiredAttribute标记不可空
+ if (p.GetCustomAttribute() != null) {
+ na = false;
+ }
+ //主键不可以为空
+ if (p.TryGetAttribute(out var _)) {
+ na = false;
+ }
+ //定义主键不可以为空
+ if (p.TryGetAttribute(out var sc) && sc.IsPrimaryKey) {
+ na = false;
+ }
+ c.IsNullable = na;
+ }
+ }
+}
diff --git a/Falcon.SugarApi/DatabaseDefinitions/EntityServices/TableNameTableService.cs b/Falcon.SugarApi/DatabaseDefinitions/EntityServices/TableNameTableService.cs
new file mode 100644
index 0000000..5ffb647
--- /dev/null
+++ b/Falcon.SugarApi/DatabaseDefinitions/EntityServices/TableNameTableService.cs
@@ -0,0 +1,19 @@
+using SqlSugar;
+using System;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace Falcon.SugarApi.DatabaseDefinitions.EntityServices
+{
+ ///
+ /// 设置表名服务
+ ///
+ public class TableNameTableService : IEntityTableServices
+ {
+ ///
+ public void SetupTable(Type t, EntityInfo e) {
+ if (t.TryGetAttribute(out var tn)) {
+ e.DbTableName = tn.Name;
+ }
+ }
+ }
+}
diff --git a/Falcon.SugarApi/DatabaseDefinitions/IEntityColumnServices.cs b/Falcon.SugarApi/DatabaseDefinitions/IEntityColumnServices.cs
new file mode 100644
index 0000000..721bdfd
--- /dev/null
+++ b/Falcon.SugarApi/DatabaseDefinitions/IEntityColumnServices.cs
@@ -0,0 +1,18 @@
+using SqlSugar;
+using System.Reflection;
+
+namespace Falcon.SugarApi.DatabaseDefinitions
+{
+ ///
+ /// 实现实体属性到列的映射服务
+ ///
+ public interface IEntityColumnServices
+ {
+ ///
+ /// 设置列属性
+ ///
+ ///
+ ///
+ void SetupColumn(PropertyInfo p, EntityColumnInfo c);
+ }
+}
diff --git a/Falcon.SugarApi/DatabaseDefinitions/IEntityTableServices.cs b/Falcon.SugarApi/DatabaseDefinitions/IEntityTableServices.cs
new file mode 100644
index 0000000..3a1379d
--- /dev/null
+++ b/Falcon.SugarApi/DatabaseDefinitions/IEntityTableServices.cs
@@ -0,0 +1,19 @@
+using SqlSugar;
+using System;
+using System.Reflection;
+
+namespace Falcon.SugarApi.DatabaseDefinitions
+{
+ ///
+ /// 实现实体类型到表映射服务
+ ///
+ public interface IEntityTableServices
+ {
+ ///
+ /// 设置表属性
+ ///
+ /// 类型
+ /// 实体
+ void SetupTable(Type t, EntityInfo e);
+ }
+}
diff --git a/Falcon.SugarApi/DatabaseDefinitions/SugarConnectionConfig.cs b/Falcon.SugarApi/DatabaseDefinitions/SugarConnectionConfig.cs
index c5d4749..46fddde 100644
--- a/Falcon.SugarApi/DatabaseDefinitions/SugarConnectionConfig.cs
+++ b/Falcon.SugarApi/DatabaseDefinitions/SugarConnectionConfig.cs
@@ -1,8 +1,10 @@
using Falcon.SugarApi.DatabaseDefinitions.Cache;
+using Falcon.SugarApi.DatabaseDefinitions.EntityServices;
using Falcon.SugarApi.JsonSerialize;
using Microsoft.Extensions.Caching.Distributed;
using SqlSugar;
using System;
+using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Reflection;
@@ -19,63 +21,37 @@ namespace Falcon.SugarApi.DatabaseDefinitions
public bool Log { get; set; }
///
- /// 实体创建服务
+ /// 表映射服务
///
- public Action EntityService
- => this.ConfigureExternalServices.EntityService;
+ public static List TableServices { get; set; } = new List();
+ ///
+ /// 列映射服务
+ ///
+ public static List ColumnServices { get; set; } = new List();
+
+ static SugarConnectionConfig() {
+ TableServices.Add(new TableNameTableService());
+
+ ColumnServices.Add(new SetupKey());
+ ColumnServices.Add(new SetupLength());
+ ColumnServices.Add(new SetupNullable());
+ }
///
/// 实例化SugarDb链接配置
///
public SugarConnectionConfig() {
this.ConfigureExternalServices ??= new ConfigureExternalServices { };
- this.ConfigureExternalServices.EntityService += SetupNullable;
- this.ConfigureExternalServices.EntityService += SetupLength;
- }
-
- ///
- /// SetNullable
- ///
- /// 属性信息
- /// 列信息
- public virtual void SetupNullable(PropertyInfo p, EntityColumnInfo c) {
- var pt = p.PropertyType;
- //所有类型默认可空
- bool na = true;
- //字符串默认可空
- na = pt == typeof(string) ? true : na;
- //Nullable<>类型可空
- if (pt.IsGenericType && pt.GetGenericTypeDefinition() == typeof(Nullable<>)) {
- na = true;
- }
- //RequiredAttribute标记不可空
- if (p.GetCustomAttribute() != null) {
- na = false;
- }
- //主键不可以为空
- if (p.TryGetAttribute(out var _)) {
- na = false;
- }
- //定义主键不可以为空
- if (p.TryGetAttribute(out var sc) && sc.IsPrimaryKey) {
- na = false;
- }
- c.IsNullable = na;
- }
- ///
- /// Set 长度规则
- ///
- /// 属性信息
- /// 列信息
- public virtual void SetupLength(PropertyInfo p, EntityColumnInfo c) {
- int len = 0;
- if (p.TryGetAttribute(out var la)) {
- len = la.Length;
- }
- if (p.TryGetAttribute(out var sc) && sc.Length != 0) {
- len = sc.Length;
- }
- c.Length = len;
+ this.ConfigureExternalServices.EntityNameService = (t, e) => {
+ foreach (var i in TableServices) {
+ i.SetupTable(t, e);
+ }
+ };
+ this.ConfigureExternalServices.EntityService = (p, c) => {
+ foreach (var i in ColumnServices) {
+ i.SetupColumn(p, c);
+ }
+ };
}
private static ICacheService? CacheService = null;
diff --git a/Falcon.SugarApi/TypeExtend.cs b/Falcon.SugarApi/TypeExtend.cs
index 0178c11..a0d4f94 100644
--- a/Falcon.SugarApi/TypeExtend.cs
+++ b/Falcon.SugarApi/TypeExtend.cs
@@ -21,5 +21,17 @@ namespace Falcon.SugarApi
p = info.GetCustomAttribute();
return p != null;
}
+
+ ///
+ /// 尝试获取Attribute
+ ///
+ /// Attribute类型
+ /// 属性
+ /// 定义的特性
+ /// 定义返回True,否则False
+ public static bool TryGetAttribute([NotNull] this Type info, out T p) where T : Attribute {
+ p = info.GetCustomAttribute();
+ return p != null;
+ }
}
}