diff --git a/XCode/Entity/IEntityModule.cs b/XCode/Entity/IEntityModule.cs
index 3c8af2e..079d547 100644
--- a/XCode/Entity/IEntityModule.cs
+++ b/XCode/Entity/IEntityModule.cs
@@ -139,6 +139,11 @@ public class EntityModules : IEnumerable<IEntityModule>
/// <summary>实体模块基类</summary>
public abstract class EntityModule : IEntityModule
{
+ #region 属性
+ /// <summary>自动清理超长字段。默认true</summary>
+ public Boolean AutoTrim { get; set; } = true;
+ #endregion
+
#region IEntityModule 成员
private readonly Dictionary<Type, Boolean> _Inited = new();
/// <summary>为指定实体类初始化模块,返回是否支持</summary>
@@ -220,6 +225,7 @@ public abstract class EntityModule : IEntityModule
// 没有这个字段,就不想了
var fi = fields.FirstOrDefault(e => e.Name.EqualIgnoreCase(name));
if (fi == null) return false;
+
name = fi.Name;
// 如果是默认值则覆盖,无视脏数据,此时很可能是新增
if (fi.Type.IsInt())
@@ -229,6 +235,12 @@ public abstract class EntityModule : IEntityModule
else if (fi.Type == typeof(String))
{
if (entity[name] is String str && !str.IsNullOrEmpty()) return false;
+
+ // 自动清理超长字段
+ if (AutoTrim && value is String str2)
+ {
+ if (fi.Length > 0 && str2.Length > fi.Length) value = str2.Substring(0, fi.Length);
+ }
}
else if (fi.Type == typeof(DateTime))
{
diff --git a/XCode/Membership/LogEntity.cs b/XCode/Membership/LogEntity.cs
index cddc5ba..b93dc0e 100644
--- a/XCode/Membership/LogEntity.cs
+++ b/XCode/Membership/LogEntity.cs
@@ -1,78 +1,75 @@
-using System;
+namespace XCode.Membership;
-namespace XCode.Membership
+/// <summary>日志实体类基类</summary>
+/// <typeparam name="TEntity"></typeparam>
+[Serializable]
+public class LogEntity<TEntity> : Entity<TEntity> where TEntity : LogEntity<TEntity>, new()
{
- /// <summary>日志实体类基类</summary>
- /// <typeparam name="TEntity"></typeparam>
- [Serializable]
- public class LogEntity<TEntity> : Entity<TEntity> where TEntity : LogEntity<TEntity>, new()
+ #region 改动时写日志
+ /// <summary>添加时写日志</summary>
+ /// <returns></returns>
+ public override Int32 Insert()
{
- #region 改动时写日志
- /// <summary>添加时写日志</summary>
- /// <returns></returns>
- public override Int32 Insert()
+ var err = "";
+ try
{
- var err = "";
- try
- {
- return base.Insert();
- }
- catch (Exception ex)
- {
- err = ex.Message;
- throw;
- }
- finally
- {
- LogProvider.Provider.WriteLog("添加", this, err);
- }
+ return base.Insert();
}
-
- /// <summary>修改时写日志</summary>
- /// <returns></returns>
- public override Int32 Update()
+ catch (Exception ex)
{
- // 必须提前写修改日志,否则修改后脏数据失效,保存的日志为空
- if (HasDirty) LogProvider.Provider.WriteLog("修改", this);
-
- try
- {
- return base.Update();
- }
- catch (Exception ex)
- {
- LogProvider.Provider.WriteLog("修改", this, ex.Message);
- throw;
- }
+ err = ex.Message;
+ throw;
}
+ finally
+ {
+ LogProvider.Provider.WriteLog("添加", this, err);
+ }
+ }
- /// <summary>删除时写日志</summary>
- /// <returns></returns>
- public override Int32 Delete()
+ /// <summary>修改时写日志</summary>
+ /// <returns></returns>
+ public override Int32 Update()
+ {
+ // 必须提前写修改日志,否则修改后脏数据失效,保存的日志为空
+ if (HasDirty) LogProvider.Provider.WriteLog("修改", this);
+
+ try
+ {
+ return base.Update();
+ }
+ catch (Exception ex)
{
- var err = "";
- try
- {
- return base.Delete();
- }
- catch (Exception ex)
- {
- err = ex.Message;
- throw;
- }
- finally
- {
- LogProvider.Provider.WriteLog("删除", this, err);
- }
+ LogProvider.Provider.WriteLog("修改", this, ex.Message);
+ throw;
}
- #endregion
+ }
- #region 日志
- /// <summary>写日志</summary>
- /// <param name="action">操作</param>
- /// <param name="success">成功</param>
- /// <param name="remark">备注</param>
- public static void WriteLog(String action, Boolean success, String remark) => LogProvider.Provider.WriteLog(typeof(TEntity), action, success, remark);
- #endregion
+ /// <summary>删除时写日志</summary>
+ /// <returns></returns>
+ public override Int32 Delete()
+ {
+ var err = "";
+ try
+ {
+ return base.Delete();
+ }
+ catch (Exception ex)
+ {
+ err = ex.Message;
+ throw;
+ }
+ finally
+ {
+ LogProvider.Provider.WriteLog("删除", this, err);
+ }
}
+ #endregion
+
+ #region 日志
+ /// <summary>写日志</summary>
+ /// <param name="action">操作</param>
+ /// <param name="success">成功</param>
+ /// <param name="remark">备注</param>
+ public static void WriteLog(String action, Boolean success, String remark) => LogProvider.Provider.WriteLog(typeof(TEntity), action, success, remark);
+ #endregion
}
\ No newline at end of file
diff --git a/XCode/Model/IPModule.cs b/XCode/Model/IPModule.cs
index 8aea502..c71b4c0 100644
--- a/XCode/Model/IPModule.cs
+++ b/XCode/Model/IPModule.cs
@@ -56,7 +56,9 @@ public class IPModule : EntityModule
if (!ip.IsNullOrEmpty())
{
// 如果不是IPv6,去掉后面端口
- if (ip.Contains("://")) ip = ip.Substring("://", null);
+ var p = ip.IndexOf("://");
+ if (p >= 0) ip = ip.Substring(p + 3);
+ //if (ip.Contains("://")) ip = ip.Substring("://", null);
//if (ip.Contains(":") && !ip.Contains("::")) ip = ip.Substring(null, ":");
switch (method)
@@ -65,9 +67,9 @@ public class IPModule : EntityModule
var fs2 = GetIPFieldNames(entity.GetType());
if (fs2 != null)
{
- foreach (var item in fs2)
+ foreach (var fi in fs2)
{
- SetItem(fs2, entity, item, ip);
+ SetItem(fs2, entity, fi, ip);
}
}
break;