mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 12:28:15 +08:00
#694 ✨ Exception信息 国际化 多语言
This commit is contained in:
@ -13,8 +13,8 @@ namespace FreeSql
|
||||
static object _dicCurdLock = new object();
|
||||
static IFreeSql GetCrud(IDbConnection dbconn)
|
||||
{
|
||||
if (dbconn == null) throw new ArgumentNullException($"{nameof(dbconn)} 不能为 null");
|
||||
if (dbconn.ConnectionString == null) throw new ArgumentNullException($"{nameof(dbconn)}.ConnectionString 不能为 null");
|
||||
if (dbconn == null) throw new ArgumentNullException($"{nameof(dbconn)} {CoreStrings.Cannot_Be_NULL}");
|
||||
if (dbconn.ConnectionString == null) throw new ArgumentNullException($"{nameof(dbconn)}.ConnectionString {CoreStrings.Cannot_Be_NULL}");
|
||||
Type dbconType = dbconn.GetType();
|
||||
var connType = dbconType.UnderlyingSystemType;
|
||||
if (_dicCurd.TryGetValue(dbconn.ConnectionString, out var fsql)) return fsql;
|
||||
@ -25,46 +25,46 @@ namespace FreeSql
|
||||
case "MySqlConnection":
|
||||
providerType = Type.GetType("FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySql")?.MakeGenericType(connType);
|
||||
if (providerType == null) providerType = Type.GetType("FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySqlConnector")?.MakeGenericType(connType);
|
||||
if (providerType == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.MySql.dll,可前往 nuget 下载");
|
||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("MySql"));
|
||||
break;
|
||||
case "SqlConnection":
|
||||
providerType = Type.GetType("FreeSql.SqlServer.SqlServerProvider`1,FreeSql.Provider.SqlServer")?.MakeGenericType(connType);
|
||||
if (providerType == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.SqlServer.dll,可前往 nuget 下载");
|
||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("SqlServer"));
|
||||
break;
|
||||
case "NpgsqlConnection":
|
||||
providerType = Type.GetType("FreeSql.PostgreSQL.PostgreSQLProvider`1,FreeSql.Provider.PostgreSQL")?.MakeGenericType(connType);
|
||||
if (providerType == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.PostgreSQL.dll,可前往 nuget 下载");
|
||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("PostgreSQL"));
|
||||
break;
|
||||
case "OracleConnection":
|
||||
providerType = Type.GetType("FreeSql.Oracle.OracleProvider`1,FreeSql.Provider.Oracle")?.MakeGenericType(connType);
|
||||
if (providerType == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.Oracle.dll,可前往 nuget 下载");
|
||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Oracle"));
|
||||
break;
|
||||
case "SQLiteConnection":
|
||||
providerType = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.Sqlite")?.MakeGenericType(connType);
|
||||
if (providerType == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.Sqlite.dll,可前往 nuget 下载");
|
||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Sqlite"));
|
||||
break;
|
||||
case "DmConnection":
|
||||
providerType = Type.GetType("FreeSql.Dameng.DamengProvider`1,FreeSql.Provider.Dameng")?.MakeGenericType(connType);
|
||||
if (providerType == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.Dameng.dll,可前往 nuget 下载");
|
||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Dameng"));
|
||||
break;
|
||||
case "OscarConnection":
|
||||
providerType = Type.GetType("FreeSql.ShenTong.ShenTongProvider`1,FreeSql.Provider.ShenTong")?.MakeGenericType(connType);
|
||||
if (providerType == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.ShenTong.dll,可前往 nuget 下载");
|
||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("ShenTong"));
|
||||
break;
|
||||
case "KdbndpConnection":
|
||||
providerType = Type.GetType("FreeSql.KingbaseES.KingbaseESProvider`1,FreeSql.Provider.KingbaseES")?.MakeGenericType(connType);
|
||||
if (providerType == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.KingbaseES.dll,可前往 nuget 下载");
|
||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("KingbaseES"));
|
||||
break;
|
||||
case "FbConnection":
|
||||
providerType = Type.GetType("FreeSql.Firebird.FirebirdProvider`1,FreeSql.Provider.Firebird")?.MakeGenericType(connType);
|
||||
if (providerType == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.Firebird.dll,可前往 nuget 下载");
|
||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Firebird"));
|
||||
break;
|
||||
case "ClickHouseConnection":
|
||||
providerType = Type.GetType("FreeSql.ClickHouse.ClickHouseProvider`1,FreeSql.Provider.ClickHouse")?.MakeGenericType(connType);
|
||||
if (providerType == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.ClickHouse.dll,可前往 nuget 下载");
|
||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("ClickHouse"));
|
||||
break;
|
||||
default:
|
||||
throw new Exception("未实现");
|
||||
throw new Exception(CoreStrings.Not_Implemented);
|
||||
}
|
||||
lock (_dicCurdLock)
|
||||
{
|
||||
@ -76,7 +76,7 @@ namespace FreeSql
|
||||
}
|
||||
static IFreeSql GetCrud(IDbTransaction dbtran)
|
||||
{
|
||||
if (dbtran == null) throw new ArgumentNullException($"{nameof(dbtran)} 不能为 null");
|
||||
if (dbtran == null) throw new ArgumentNullException($"{nameof(dbtran)} {CoreStrings.Cannot_Be_NULL}");
|
||||
return GetCrud(dbtran.Connection);
|
||||
}
|
||||
|
||||
|
@ -476,7 +476,7 @@ namespace FreeSql
|
||||
if (expContext.ParsedContent["delimiter"] == "','")
|
||||
expContext.Result = $"wm_concat_text({expContext.ParsedContent["column"]})";
|
||||
else
|
||||
throw new NotImplementedException("GBase 暂时不支持逗号以外的分割符");
|
||||
throw new NotImplementedException(CoreStrings.GBase_NotSupport_OtherThanCommas);
|
||||
//expContext.Result = $"replace(wm_concat_text({expContext.ParsedContent["column"]}), ',', {expContext.ParsedContent["delimiter"]})";
|
||||
return null;
|
||||
}
|
||||
|
@ -157,7 +157,7 @@ public static partial class FreeSqlGlobalExtensions
|
||||
var ret = _dicInternalGetTypeConstructor0OrFirst.GetOrAdd(that, tp =>
|
||||
tp.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[0], null) ??
|
||||
tp.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).OrderBy(a => a.IsPublic ? 0 : 1).FirstOrDefault());
|
||||
if (ret == null && isThrow) throw new ArgumentException($"{that.FullName} 类型无方法访问构造函数");
|
||||
if (ret == null && isThrow) throw new ArgumentException(CoreStrings.Type_Cannot_Access_Constructor(that.FullName));
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -378,7 +378,7 @@ public static partial class FreeSqlGlobalExtensions
|
||||
var t1sel = orm.Select<T1>() as Select1Provider<T1>;
|
||||
var t1expFul = t1sel.ConvertStringPropertyToExpression(property, true);
|
||||
var t1exp = props.Length == 1 ? t1expFul : t1sel.ConvertStringPropertyToExpression(props[0], true);
|
||||
if (t1expFul == null) throw new ArgumentException($"{nameof(property)} 无法解析为表达式树");
|
||||
if (t1expFul == null) throw new ArgumentException(CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property)));
|
||||
var propElementType = t1expFul.Type.GetGenericArguments().FirstOrDefault() ?? t1expFul.Type.GetElementType();
|
||||
if (propElementType != null) //IncludeMany
|
||||
{
|
||||
@ -394,7 +394,7 @@ public static partial class FreeSqlGlobalExtensions
|
||||
return list;
|
||||
}
|
||||
var tbtr = t1tb.GetTableRef(props[0], true);
|
||||
if (tbtr == null) throw new ArgumentException($"{nameof(property)} 参数错误,它不是有效的导航属性");
|
||||
if (tbtr == null) throw new ArgumentException(CoreStrings.ParameterError_NotValid_Navigation(nameof(property)));
|
||||
var reftb = orm.CodeFirst.GetTableByEntity(t1exp.Type);
|
||||
var refsel = orm.Select<object>().AsType(t1exp.Type) as Select1Provider<object>;
|
||||
if (props.Length > 1)
|
||||
@ -443,14 +443,14 @@ public static partial class FreeSqlGlobalExtensions
|
||||
}
|
||||
var sel = orm.Select<T1>() as Select1Provider<T1>;
|
||||
var exp = sel.ConvertStringPropertyToExpression(property, true);
|
||||
if (exp == null) throw new ArgumentException($"{nameof(property)} 无法解析为表达式树");
|
||||
if (exp == null) throw new ArgumentException(CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property)));
|
||||
var memExp = exp as MemberExpression;
|
||||
if (memExp == null) throw new ArgumentException($"{nameof(property)} 无法解析为表达式树2");
|
||||
if (memExp == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}2");
|
||||
var parTb = orm.CodeFirst.GetTableByEntity(memExp.Expression.Type);
|
||||
if (parTb == null) throw new ArgumentException($"{nameof(property)} 无法解析为表达式树3");
|
||||
if (parTb == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}3");
|
||||
var propElementType = exp.Type.GetGenericArguments().FirstOrDefault() ?? exp.Type.GetElementType();
|
||||
var reftb = orm.CodeFirst.GetTableByEntity(propElementType);
|
||||
if (reftb == null) throw new ArgumentException($"{nameof(property)} 参数错误,它不是集合属性,必须为 IList<T> 或者 ICollection<T>");
|
||||
if (reftb == null) throw new ArgumentException(CoreStrings.ParameterError_NotValid_Collection(nameof(property)));
|
||||
|
||||
if (string.IsNullOrWhiteSpace(where) == false)
|
||||
{
|
||||
@ -463,12 +463,12 @@ public static partial class FreeSqlGlobalExtensions
|
||||
for (var a = 0; a < whereSplit.Length; a++)
|
||||
{
|
||||
var keyval = whereSplit[a].Split('=').Select(x => x.Trim()).Where(x => string.IsNullOrWhiteSpace(x) == false).ToArray();
|
||||
if (keyval.Length != 2) throw new ArgumentException($"{nameof(where)} 参数错误,格式 \"TopicId=Id,多组使用逗号连接\" ");
|
||||
if (keyval.Length != 2) throw new ArgumentException(CoreStrings.ParameterError_NotValid_UseCommas(nameof(where)));
|
||||
|
||||
if (reftb.ColumnsByCs.TryGetValue(keyval[0], out var keycol) == false)
|
||||
throw new ArgumentException($"{nameof(where)} 参数错误,{keyval[0]} 不是有效的属性名,在实体类 {reftb.Type.DisplayCsharp()} 无法找到");
|
||||
throw new ArgumentException(CoreStrings.ParameterError_NotValid_PropertyName(nameof(where),keyval[0], reftb.Type.DisplayCsharp()));
|
||||
if (parTb.ColumnsByCs.TryGetValue(keyval[1], out var valcol) == false)
|
||||
throw new ArgumentException($"{nameof(where)} 参数错误,{keyval[1]} 不是有效的属性名,在实体类 {parTb.Type.DisplayCsharp()} 无法找到");
|
||||
throw new ArgumentException(CoreStrings.ParameterError_NotValid_PropertyName(nameof(where), keyval[1], parTb.Type.DisplayCsharp()));
|
||||
|
||||
var tmpExp = Expression.Equal(
|
||||
Expression.Convert(Expression.MakeMemberAccess(refparamExp, reftb.Properties[keyval[0]]), valcol.CsType),
|
||||
@ -494,7 +494,7 @@ public static partial class FreeSqlGlobalExtensions
|
||||
select.Split(',').Select(x => x.Trim()).Where(x => string.IsNullOrWhiteSpace(x) == false).Select(a =>
|
||||
{
|
||||
if (reftb.ColumnsByCs.TryGetValue(a, out var col) == false)
|
||||
throw new ArgumentException($"{nameof(select)} 参数错误,{a} 不是有效的属性名,在实体类 {reftb.Type.DisplayCsharp()} 无法找到");
|
||||
throw new ArgumentException(CoreStrings.ParameterError_NotValid_PropertyName(nameof(select), a, reftb.Type.DisplayCsharp()));
|
||||
return Expression.Bind(reftb.Properties[col.CsName], Expression.MakeMemberAccess(refparamExp, reftb.Properties[col.CsName]));
|
||||
}).ToArray());
|
||||
|
||||
@ -505,7 +505,7 @@ public static partial class FreeSqlGlobalExtensions
|
||||
var funcType = typeof(Func<,>).MakeGenericType(sel._tables[0].Table.Type, typeof(IEnumerable<>).MakeGenericType(reftb.Type));
|
||||
var navigateSelector = Expression.Lambda(funcType, exp, sel._tables[0].Parameter);
|
||||
var incMethod = sel.GetType().GetMethod("IncludeMany");
|
||||
if (incMethod == null) throw new Exception("运行时错误,反射获取 IncludeMany 方法失败");
|
||||
if (incMethod == null) throw new Exception(CoreStrings.RunTimeError_Reflection_IncludeMany);
|
||||
incMethod.MakeGenericMethod(reftb.Type).Invoke(sel, new object[] { navigateSelector, null });
|
||||
return sel;
|
||||
}
|
||||
@ -595,7 +595,7 @@ public static partial class FreeSqlGlobalExtensions
|
||||
a.RefType == FreeSql.Internal.Model.TableRefType.OneToMany &&
|
||||
a.RefEntityType == tb.Type).ToArray();
|
||||
|
||||
if (navs.Length != 1) throw new ArgumentException($"{tb.Type.FullName} 不是父子关系,无法使用该功能");
|
||||
if (navs.Length != 1) throw new ArgumentException(CoreStrings.Entity_NotParentChild_Relationship(tb.Type.FullName));
|
||||
var tbref = navs[0];
|
||||
|
||||
var cteName = "as_tree_cte";
|
||||
@ -641,7 +641,7 @@ public static partial class FreeSqlGlobalExtensions
|
||||
}
|
||||
if (int.TryParse((mysqlVersion ?? "").Split('.')[0], out var mysqlVersionFirst) && mysqlVersionFirst < 8)
|
||||
{
|
||||
if (tbref.Columns.Count > 1) throw new ArgumentException($"{tb.Type.FullName} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键");
|
||||
if (tbref.Columns.Count > 1) throw new ArgumentException(CoreStrings.Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys(tb.Type.FullName));
|
||||
var mysql56Sql = "";
|
||||
if (up == false)
|
||||
{
|
||||
@ -833,7 +833,7 @@ SELECT ");
|
||||
case DataType.Firebird:
|
||||
return that.OrderBy("rand()");
|
||||
}
|
||||
throw new NotSupportedException($"{s0p._orm.Ado.DataType} 不支持 OrderByRandom 随机排序");
|
||||
throw new NotSupportedException($"{CoreStrings.Not_Support_OrderByRandom(s0p._orm.Ado.DataType)}");
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -1033,7 +1033,7 @@ SELECT ");
|
||||
foreach (var primary in primarys)
|
||||
{
|
||||
if (table.ColumnsByCs.TryGetValue(string.Concat(primary), out var col)) pks.Add(col);
|
||||
else throw new Exception($"GetPrimarys 传递的参数 \"{primary}\" 不正确,它不属于字典数据的键名");
|
||||
else throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(primary));
|
||||
}
|
||||
return pks.ToArray();
|
||||
}
|
||||
@ -1042,7 +1042,7 @@ SELECT ");
|
||||
foreach (var primary in primarys)
|
||||
{
|
||||
if (table.ColumnsByCs.TryGetValue(string.Concat(primary), out var col)) col.Attribute.IsPrimary = true;
|
||||
else throw new Exception($"GetPrimarys 传递的参数 \"{primary}\" 不正确,它不属于字典数据的键名");
|
||||
else throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(primary));
|
||||
}
|
||||
table.Primarys = table.Columns.Where(a => a.Value.Attribute.IsPrimary).Select(a => a.Value).ToArray();
|
||||
}
|
||||
|
Reference in New Issue
Block a user