新增实体列映射和实体表映射
This commit is contained in:
parent
e58c98e759
commit
cdc0f5f1a0
|
@ -0,0 +1,19 @@
|
||||||
|
using SqlSugar;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace Falcon.SugarApi.DatabaseDefinitions.EntityServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 设置主键
|
||||||
|
/// </summary>
|
||||||
|
public class SetupKey : IEntityColumnServices
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public void SetupColumn(PropertyInfo p, EntityColumnInfo c) {
|
||||||
|
if (p.TryGetAttribute<KeyAttribute>(out var _)) {
|
||||||
|
c.IsPrimarykey = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 设置长度规则
|
||||||
|
/// </summary>
|
||||||
|
public class SetupLength : IEntityColumnServices
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public void SetupColumn(PropertyInfo p, EntityColumnInfo c) {
|
||||||
|
var len = new List<int>();
|
||||||
|
if (p.TryGetAttribute<StringLengthAttribute>(out var sl)) {
|
||||||
|
len.Add(sl.MaximumLength);
|
||||||
|
}
|
||||||
|
if (p.TryGetAttribute<MaxLengthAttribute>(out var la)) {
|
||||||
|
len.Add(la.Length);
|
||||||
|
}
|
||||||
|
if (p.TryGetAttribute<SugarColumn>(out var sc) && sc.Length != 0) {
|
||||||
|
len.Add(sc.Length);
|
||||||
|
}
|
||||||
|
c.Length = len.Max();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace Falcon.SugarApi.DatabaseDefinitions.EntityServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 设置Nullable
|
||||||
|
/// </summary>
|
||||||
|
public class SetupNullable : IEntityColumnServices
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
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<RequiredAttribute>() != null) {
|
||||||
|
na = false;
|
||||||
|
}
|
||||||
|
//主键不可以为空
|
||||||
|
if (p.TryGetAttribute<KeyAttribute>(out var _)) {
|
||||||
|
na = false;
|
||||||
|
}
|
||||||
|
//定义主键不可以为空
|
||||||
|
if (p.TryGetAttribute<SugarColumn>(out var sc) && sc.IsPrimaryKey) {
|
||||||
|
na = false;
|
||||||
|
}
|
||||||
|
c.IsNullable = na;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
|
namespace Falcon.SugarApi.DatabaseDefinitions.EntityServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 设置表名服务
|
||||||
|
/// </summary>
|
||||||
|
public class TableNameTableService : IEntityTableServices
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public void SetupTable(Type t, EntityInfo e) {
|
||||||
|
if (t.TryGetAttribute<TableAttribute>(out var tn)) {
|
||||||
|
e.DbTableName = tn.Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
18
Falcon.SugarApi/DatabaseDefinitions/IEntityColumnServices.cs
Normal file
18
Falcon.SugarApi/DatabaseDefinitions/IEntityColumnServices.cs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
using SqlSugar;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace Falcon.SugarApi.DatabaseDefinitions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 实现实体属性到列的映射服务
|
||||||
|
/// </summary>
|
||||||
|
public interface IEntityColumnServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 设置列属性
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="p"></param>
|
||||||
|
/// <param name="c"></param>
|
||||||
|
void SetupColumn(PropertyInfo p, EntityColumnInfo c);
|
||||||
|
}
|
||||||
|
}
|
19
Falcon.SugarApi/DatabaseDefinitions/IEntityTableServices.cs
Normal file
19
Falcon.SugarApi/DatabaseDefinitions/IEntityTableServices.cs
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace Falcon.SugarApi.DatabaseDefinitions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 实现实体类型到表映射服务
|
||||||
|
/// </summary>
|
||||||
|
public interface IEntityTableServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 设置表属性
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="t">类型</param>
|
||||||
|
/// <param name="e">实体</param>
|
||||||
|
void SetupTable(Type t, EntityInfo e);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,10 @@
|
||||||
using Falcon.SugarApi.DatabaseDefinitions.Cache;
|
using Falcon.SugarApi.DatabaseDefinitions.Cache;
|
||||||
|
using Falcon.SugarApi.DatabaseDefinitions.EntityServices;
|
||||||
using Falcon.SugarApi.JsonSerialize;
|
using Falcon.SugarApi.JsonSerialize;
|
||||||
using Microsoft.Extensions.Caching.Distributed;
|
using Microsoft.Extensions.Caching.Distributed;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
|
@ -19,63 +21,37 @@ namespace Falcon.SugarApi.DatabaseDefinitions
|
||||||
public bool Log { get; set; }
|
public bool Log { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 实体创建服务
|
/// 表映射服务
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Action<PropertyInfo, EntityColumnInfo> EntityService
|
public static List<IEntityTableServices> TableServices { get; set; } = new List<IEntityTableServices>();
|
||||||
=> this.ConfigureExternalServices.EntityService;
|
/// <summary>
|
||||||
|
/// 列映射服务
|
||||||
|
/// </summary>
|
||||||
|
public static List<IEntityColumnServices> ColumnServices { get; set; } = new List<IEntityColumnServices>();
|
||||||
|
|
||||||
|
static SugarConnectionConfig() {
|
||||||
|
TableServices.Add(new TableNameTableService());
|
||||||
|
|
||||||
|
ColumnServices.Add(new SetupKey());
|
||||||
|
ColumnServices.Add(new SetupLength());
|
||||||
|
ColumnServices.Add(new SetupNullable());
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 实例化SugarDb链接配置
|
/// 实例化SugarDb链接配置
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public SugarConnectionConfig() {
|
public SugarConnectionConfig() {
|
||||||
this.ConfigureExternalServices ??= new ConfigureExternalServices { };
|
this.ConfigureExternalServices ??= new ConfigureExternalServices { };
|
||||||
this.ConfigureExternalServices.EntityService += SetupNullable;
|
this.ConfigureExternalServices.EntityNameService = (t, e) => {
|
||||||
this.ConfigureExternalServices.EntityService += SetupLength;
|
foreach (var i in TableServices) {
|
||||||
}
|
i.SetupTable(t, e);
|
||||||
|
}
|
||||||
/// <summary>
|
};
|
||||||
/// SetNullable
|
this.ConfigureExternalServices.EntityService = (p, c) => {
|
||||||
/// </summary>
|
foreach (var i in ColumnServices) {
|
||||||
/// <param name="p">属性信息</param>
|
i.SetupColumn(p, c);
|
||||||
/// <param name="c">列信息</param>
|
}
|
||||||
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<RequiredAttribute>() != null) {
|
|
||||||
na = false;
|
|
||||||
}
|
|
||||||
//主键不可以为空
|
|
||||||
if (p.TryGetAttribute<KeyAttribute>(out var _)) {
|
|
||||||
na = false;
|
|
||||||
}
|
|
||||||
//定义主键不可以为空
|
|
||||||
if (p.TryGetAttribute<SugarColumn>(out var sc) && sc.IsPrimaryKey) {
|
|
||||||
na = false;
|
|
||||||
}
|
|
||||||
c.IsNullable = na;
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Set 长度规则
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="p">属性信息</param>
|
|
||||||
/// <param name="c">列信息</param>
|
|
||||||
public virtual void SetupLength(PropertyInfo p, EntityColumnInfo c) {
|
|
||||||
int len = 0;
|
|
||||||
if (p.TryGetAttribute<MaxLengthAttribute>(out var la)) {
|
|
||||||
len = la.Length;
|
|
||||||
}
|
|
||||||
if (p.TryGetAttribute<SugarColumn>(out var sc) && sc.Length != 0) {
|
|
||||||
len = sc.Length;
|
|
||||||
}
|
|
||||||
c.Length = len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ICacheService? CacheService = null;
|
private static ICacheService? CacheService = null;
|
||||||
|
|
|
@ -21,5 +21,17 @@ namespace Falcon.SugarApi
|
||||||
p = info.GetCustomAttribute<T>();
|
p = info.GetCustomAttribute<T>();
|
||||||
return p != null;
|
return p != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 尝试获取Attribute
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Attribute类型</typeparam>
|
||||||
|
/// <param name="info">属性</param>
|
||||||
|
/// <param name="p">定义的特性</param>
|
||||||
|
/// <returns>定义返回True,否则False</returns>
|
||||||
|
public static bool TryGetAttribute<T>([NotNull] this Type info, out T p) where T : Attribute {
|
||||||
|
p = info.GetCustomAttribute<T>();
|
||||||
|
return p != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user