mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 04:18:16 +08:00
- 修复 Aop.AuditValue 与 FreeSql.Repository 主键状态管理的冲突;
This commit is contained in:
@ -199,5 +199,152 @@
|
||||
创建日期
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Zeus.Utility.Entity.EntityBase`1">
|
||||
<summary>
|
||||
实体类基类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Zeus.Utility.Entity.EntityBase`1.#ctor">
|
||||
<summary>
|
||||
初始化一个<see cref="T:Zeus.Utility.Entity.EntityBase`1"/>类型的新实例
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.Utility.Entity.EntityBase`1.ID">
|
||||
<summary>
|
||||
获取或设置主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.Utility.Entity.EntityBase`1.CreatedAt">
|
||||
<summary>
|
||||
创建时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Zeus.Utility.Entity.EntityBase`1.Equals(System.Object)">
|
||||
<summary>
|
||||
判断两个实体是否是同一数据记录的实体
|
||||
</summary>
|
||||
<param name="obj">要比较的实体信息</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Zeus.Utility.Entity.EntityBase`1.IsKeyEqual(`0,`0)">
|
||||
<summary>
|
||||
实体Id是否相等
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Zeus.Utility.Entity.EntityBase`1.GetHashCode">
|
||||
<summary>
|
||||
用作特定类型的哈希函数
|
||||
</summary>
|
||||
<returns>
|
||||
当前 <see cref="T:System.Object"/> 的哈希代码。<br/>
|
||||
如果<c>Id</c>为<c>null</c>则返回0,
|
||||
如果不为<c>null</c>则返回<c>Id</c>对应的哈希值
|
||||
</returns>
|
||||
</member>
|
||||
<member name="T:Zeus.Utility.Entity.IEntity`1">
|
||||
<summary>
|
||||
数据模型接口
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.Utility.Entity.IEntity`1.ID">
|
||||
<summary>
|
||||
实体唯一标识,主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.Utility.Entity.IEntity`1.CreatedAt">
|
||||
<summary>
|
||||
创建时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Zeus.Domain.Enum.IdentityType">
|
||||
<summary>
|
||||
登录类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Zeus.SystemUser">
|
||||
<summary>
|
||||
用户表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUser.DisplayName">
|
||||
<summary>
|
||||
显示名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUser.RealName">
|
||||
<summary>
|
||||
真实名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUser.Gender">
|
||||
<summary>
|
||||
性别
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUser.Birthday">
|
||||
<summary>
|
||||
生日
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUser.AvaterURL">
|
||||
<summary>
|
||||
头像URL地址
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUser.Remark">
|
||||
<summary>
|
||||
备注
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUser.IsEnabled">
|
||||
<summary>
|
||||
启用标志
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUser.IsDeleted">
|
||||
<summary>
|
||||
删除标志
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUser.SystemUserAuthentication_List">
|
||||
<summary>
|
||||
所属用户认证记录
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Zeus.SystemUserAuthentication">
|
||||
<summary>
|
||||
用户认证表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUserAuthentication.SystemUserID">
|
||||
<summary>
|
||||
用户表ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUserAuthentication.SystemUser">
|
||||
<summary>
|
||||
用户
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUserAuthentication.IdentityType">
|
||||
<summary>
|
||||
登录类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUserAuthentication.Identifier">
|
||||
<summary>
|
||||
登录标识
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUserAuthentication.Credential">
|
||||
<summary>
|
||||
登录凭证
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Zeus.SystemUserAuthentication.IsVerified">
|
||||
<summary>
|
||||
验证标志
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
|
84
FreeSql.Tests/FreeSql.Tests/Other/EntityBase.cs
Normal file
84
FreeSql.Tests/FreeSql.Tests/Other/EntityBase.cs
Normal file
@ -0,0 +1,84 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Text;
|
||||
|
||||
namespace Zeus.Utility.Entity
|
||||
{
|
||||
/// <summary>
|
||||
/// 实体类基类
|
||||
/// </summary>
|
||||
public abstract class EntityBase<TKey> : IEntity<TKey> where TKey : IEquatable<TKey>
|
||||
{
|
||||
/// <summary>
|
||||
/// 初始化一个<see cref="EntityBase{TKey}"/>类型的新实例
|
||||
/// </summary>
|
||||
protected EntityBase()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置主键
|
||||
/// </summary>
|
||||
[Key]
|
||||
public virtual TKey ID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public virtual DateTime CreatedAt { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 判断两个实体是否是同一数据记录的实体
|
||||
/// </summary>
|
||||
/// <param name="obj">要比较的实体信息</param>
|
||||
/// <returns></returns>
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!(obj is EntityBase<TKey> entity))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return IsKeyEqual(entity.ID, ID);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 实体Id是否相等
|
||||
/// </summary>
|
||||
public static bool IsKeyEqual(TKey id1, TKey id2)
|
||||
{
|
||||
if (id1 == null && id2 == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (id1 == null || id2 == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return Equals(id1, id2);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用作特定类型的哈希函数
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// 当前 <see cref="T:System.Object"/> 的哈希代码。<br/>
|
||||
/// 如果<c>Id</c>为<c>null</c>则返回0,
|
||||
/// 如果不为<c>null</c>则返回<c>Id</c>对应的哈希值
|
||||
/// </returns>
|
||||
public override int GetHashCode()
|
||||
{
|
||||
if (ID == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return ID.ToString().GetHashCode();
|
||||
}
|
||||
}
|
||||
}
|
21
FreeSql.Tests/FreeSql.Tests/Other/IEntity.cs
Normal file
21
FreeSql.Tests/FreeSql.Tests/Other/IEntity.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Zeus.Utility.Entity
|
||||
{
|
||||
/// <summary>
|
||||
/// 数据模型接口
|
||||
/// </summary>
|
||||
public interface IEntity<out TKey>
|
||||
{
|
||||
/// <summary>
|
||||
/// 实体唯一标识,主键
|
||||
/// </summary>
|
||||
TKey ID { get; }
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
DateTime CreatedAt { get; set; }
|
||||
}
|
||||
}
|
16
FreeSql.Tests/FreeSql.Tests/Other/IdentityType.cs
Normal file
16
FreeSql.Tests/FreeSql.Tests/Other/IdentityType.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Zeus.Domain.Enum
|
||||
{
|
||||
/// <summary>
|
||||
/// 登录类型
|
||||
/// </summary>
|
||||
public enum IdentityType
|
||||
{
|
||||
Account,
|
||||
Email,
|
||||
Mobile
|
||||
}
|
||||
}
|
60
FreeSql.Tests/FreeSql.Tests/Other/SystemUser.cs
Normal file
60
FreeSql.Tests/FreeSql.Tests/Other/SystemUser.cs
Normal file
@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using FreeSql.DataAnnotations;
|
||||
using Zeus.Utility.Entity;
|
||||
|
||||
namespace Zeus
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户表
|
||||
/// </summary>
|
||||
[Table(Name = "system_user")]
|
||||
public partial class SystemUser : EntityBase<long>
|
||||
{
|
||||
/// <summary>
|
||||
/// 显示名称
|
||||
/// </summary>
|
||||
[Column(DbType = "varchar(20)", IsNullable = false, Unique = "UK_DisplayName")]
|
||||
public string DisplayName { get; set; }
|
||||
/// <summary>
|
||||
/// 真实名称
|
||||
/// </summary>
|
||||
[Column(DbType = "varchar(20)")]
|
||||
public string RealName { get; set; }
|
||||
/// <summary>
|
||||
/// 性别
|
||||
/// </summary>
|
||||
[Column(DbType = "varchar(2)")]
|
||||
public string Gender { get; set; }
|
||||
/// <summary>
|
||||
/// 生日
|
||||
/// </summary>
|
||||
[Column(DbType = "datetime")]
|
||||
public DateTime? Birthday { get; set; }
|
||||
/// <summary>
|
||||
/// 头像URL地址
|
||||
/// </summary>
|
||||
[Column(DbType = "varchar(200)")]
|
||||
public string AvaterURL { get; set; }
|
||||
/// <summary>
|
||||
/// 备注
|
||||
/// </summary>
|
||||
[Column(DbType = "varchar(500)")]
|
||||
public string Remark { get; set; }
|
||||
/// <summary>
|
||||
/// 启用标志
|
||||
/// </summary>
|
||||
[Column(DbType = "bit(1)", IsNullable = false)]
|
||||
public bool IsEnabled { get; set; }
|
||||
/// <summary>
|
||||
/// 删除标志
|
||||
/// </summary>
|
||||
[Column(DbType = "bit(1)", IsNullable = false)]
|
||||
public bool IsDeleted { get; set; }
|
||||
/// <summary>
|
||||
/// 所属用户认证记录
|
||||
/// </summary>
|
||||
[Navigate("SystemUserID")]
|
||||
public ICollection<SystemUserAuthentication> SystemUserAuthentication_List { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using FreeSql.DataAnnotations;
|
||||
using Zeus.Domain.Enum;
|
||||
using Zeus.Utility.Entity;
|
||||
|
||||
namespace Zeus
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户认证表
|
||||
/// </summary>
|
||||
[Table(Name = "system_user_authentication")]
|
||||
public partial class SystemUserAuthentication : EntityBase<long>
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户表ID
|
||||
/// </summary>
|
||||
[Column(DbType = "bigint(20)", IsNullable = false)]
|
||||
public long SystemUserID { get; set; }
|
||||
/// <summary>
|
||||
/// 用户
|
||||
/// </summary>
|
||||
[Navigate("SystemUserID")]
|
||||
public SystemUser SystemUser { get; set; }
|
||||
/// <summary>
|
||||
/// 登录类型
|
||||
/// </summary>
|
||||
[Column(DbType = "varchar(10)", MapType = typeof(string), IsNullable = false)]
|
||||
public IdentityType IdentityType { get; set; }
|
||||
/// <summary>
|
||||
/// 登录标识
|
||||
/// </summary>
|
||||
[Column(DbType = "varchar(50)", IsNullable = false, Unique = "UK_Identifier")]
|
||||
public string Identifier { get; set; }
|
||||
/// <summary>
|
||||
/// 登录凭证
|
||||
/// </summary>
|
||||
[Column(DbType = "varchar(50)", IsNullable = false)]
|
||||
public string Credential { get; set; }
|
||||
/// <summary>
|
||||
/// 验证标志
|
||||
/// </summary>
|
||||
[Column(DbType = "bit(1)", IsNullable = false)]
|
||||
public bool IsVerified { get; set; }
|
||||
}
|
||||
}
|
@ -11,6 +11,10 @@ using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections;
|
||||
using System.Diagnostics;
|
||||
using Zeus;
|
||||
using Zeus.Domain.Enum;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Reflection;
|
||||
|
||||
namespace FreeSql.Tests
|
||||
{
|
||||
@ -345,9 +349,54 @@ namespace FreeSql.Tests
|
||||
}
|
||||
|
||||
public static int GetUNIX_TIMESTAMP() => 0;
|
||||
|
||||
private List<SystemUser> GetSystemUser()
|
||||
{
|
||||
SystemUser user = new SystemUser
|
||||
{
|
||||
DisplayName = "系统管理员",
|
||||
RealName = "系统管理员",
|
||||
Gender = "男",
|
||||
Birthday = new DateTime(1984, 7, 1),
|
||||
IsEnabled = true,
|
||||
IsDeleted = false,
|
||||
Remark = "禁止删除",
|
||||
SystemUserAuthentication_List = new List<SystemUserAuthentication>()
|
||||
};
|
||||
user.SystemUserAuthentication_List.Add(new SystemUserAuthentication()
|
||||
{
|
||||
IdentityType = IdentityType.Account,
|
||||
Identifier = "admin",
|
||||
Credential = "HyrPNXuCBaqZU3QIJqP9eThOHpFfm9p+",
|
||||
IsVerified = true
|
||||
});
|
||||
user.SystemUserAuthentication_List.Add(new SystemUserAuthentication()
|
||||
{
|
||||
IdentityType = IdentityType.Mobile,
|
||||
Identifier = "13580592001",
|
||||
Credential = "HyrPNXuCBaqZU3QIJqP9eThOHpFfm9p+",
|
||||
IsVerified = true
|
||||
});
|
||||
var users = new List<SystemUser>
|
||||
{
|
||||
user
|
||||
};
|
||||
return users;
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void Test1()
|
||||
{
|
||||
//g.mysql.Aop.AuditValue += (s, e) =>
|
||||
//{
|
||||
// if (e.Column.CsType == typeof(long)
|
||||
// && e.Property.GetCustomAttribute<KeyAttribute>(false) != null
|
||||
// && e.Value?.ToString() == "0")
|
||||
// e.Value = new Random().Next();
|
||||
//};
|
||||
//g.mysql.GetRepository<SystemUser>().Insert(GetSystemUser());
|
||||
|
||||
g.mysql.Aop.ParseExpression += new EventHandler<Aop.ParseExpressionEventArgs>((s, e) =>
|
||||
{
|
||||
if (e.Expression.NodeType == ExpressionType.Call && (e.Expression as MethodCallExpression).Method.Name == "GetUNIX_TIMESTAMP")
|
||||
|
Reference in New Issue
Block a user