- 优化 ISelect<object>.WithMemory 对匿名类型的支持;

This commit is contained in:
2881099
2024-11-08 17:40:42 +08:00
parent 2ae799aba2
commit 1f21dd72d9
6 changed files with 106 additions and 378 deletions

View File

@@ -170,7 +170,7 @@ namespace FreeSql
/// </summary>
public static string NotFoundMethod_StatesRemoveByObjects => Language == "cn" ?
@"找不到方法 DbSet<>.StatesRemoveByObjects" :
@"FreeSql: Method DbSet<> not found. StatesRemoveByObjects";
@"FreeSql: Method not found DbSet<>.StatesRemoveByObjects";
/// <summary>
/// 参数 data 类型错误 {entityTypeFullName}
/// </summary>

View File

@@ -712,15 +712,6 @@
<param name="modelBuilder"></param>
<returns></returns>
</member>
<member name="M:FreeSqlDbContextExtensions.ApplyConfigurationsFromAssembly(FreeSql.ICodeFirst,System.Reflection.Assembly,System.Func{System.Type,System.Boolean})">
<summary>
根据Assembly扫描所有继承IEntityTypeConfiguration&lt;T&gt;的配置类
</summary>
<param name="codeFirst"></param>
<param name="assembly"></param>
<param name="predicate"></param>
<returns></returns>
</member>
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
<summary>
创建普通数据上下文档对象
@@ -758,13 +749,5 @@
<param name="that"></param>
<returns></returns>
</member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members>
</doc>

View File

@@ -1087,93 +1087,6 @@
</summary>
<returns></returns>
</member>
<member name="T:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder">
<summary>
动态创建实体类型
</summary>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.#ctor(IFreeSql,System.String,System.Attribute[])">
<summary>
配置Class
</summary>
<param name="className">类名</param>
<param name="attributes">类标记的特性[Table(Name = "xxx")] [Index(xxxx)]</param>
<returns></returns>
</member>
<member name="P:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.TypeBuilder">
<summary>
获取类型构建器可作为要构建的Type来引用
</summary>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Attribute[])">
<summary>
配置属性
</summary>
<param name="propertyName">属性名称</param>
<param name="propertyType">属性类型</param>
<param name="attributes">属性标记的特性-支持多个</param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Boolean,System.Attribute[])">
<summary>
配置属性
</summary>
<param name="propertyName">属性名称</param>
<param name="propertyType">属性类型</param>
<param name="isOverride">该属性是否重写父类属性</param>
<param name="attributes">属性标记的特性-支持多个</param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Boolean,System.Object,System.Attribute[])">
<summary>
配置属性
</summary>
<param name="propertyName">属性名称</param>
<param name="propertyType">属性类型</param>
<param name="isOverride">该属性是否重写父类属性</param>
<param name="defaultValue">属性默认值</param>
<param name="attributes">属性标记的特性-支持多个</param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Extend(System.Type)">
<summary>
配置父类
</summary>
<param name="superClass">父类类型</param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.OverrideProperty(System.Reflection.Emit.TypeBuilder@,System.Reflection.Emit.MethodBuilder,FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.PropertyMethodEnum,System.String)">
<summary>
Override属性
</summary>
<param name="typeBuilder"></param>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Build">
<summary>
Emit动态创建出Class - Type
</summary>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.BuildJustType">
<summary>
Emit动态创建出Class - Type不附带获取TableInfo
</summary>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.FirstCharToLower(System.String)">
<summary>
首字母小写
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.FirstCharToUpper(System.String)">
<summary>
首字母大写
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.EntityUtil.EntityUtilExtensions.GetEntityKeyString(IFreeSql,System.Type,System.Object,System.Boolean,System.String)">
<summary>
获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 ""
@@ -3376,13 +3289,6 @@
</summary>
<returns></returns>
</member>
<member name="M:FreeSql.IUpdate`1.ExecuteUpdatedAsync(System.Threading.CancellationToken)">
<summary>
执行SQL语句返回更新后的记录<para></para>
注意:此方法只有 Postgresql/SqlServer 有效果
</summary>
<returns></returns>
</member>
<member name="M:FreeSql.IUpdateJoin`2.WithTransaction(System.Data.Common.DbTransaction)">
<summary>
指定事务对象
@@ -3727,177 +3633,6 @@
<param name="parms"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteConnectTestAsync(System.Int32,System.Threading.CancellationToken)">
<summary>
测试数据库是否连接正确,本方法执行如下命令:<para></para>
MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1<para></para>
Oracle: SELECT 1 FROM dual<para></para>
</summary>
<param name="commandTimeout">命令超时设置(秒)</param>
<param name="cancellationToken"></param>
<returns>true: 成功, false: 失败</returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader},System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
查询若使用读写分离查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
</summary>
<param name="readerHander"></param>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader},System.Threading.Tasks.Task},System.String,System.Object,System.Threading.CancellationToken)">
<summary>
查询ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="readerHander"></param>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
查询
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
查询ExecuteArrayAsync("select * from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
查询
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
查询ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
查询
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
查询ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
在【主库】执行
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
在【主库】执行ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
在【主库】执行
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
在【主库】执行ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``1(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
执行SQL返回对象集合QueryAsync&lt;User&gt;("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
</summary>
<typeparam name="T"></typeparam>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``1(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
执行SQL返回对象集合QueryAsync&lt;User&gt;("select * from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<typeparam name="T"></typeparam>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``2(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
执行SQL返回对象集合Query&lt;User&gt;("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
</summary>
<typeparam name="T1"></typeparam>
<typeparam name="T2"></typeparam>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``2(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
执行SQL返回对象集合Query&lt;User, Address&gt;("select * from user where age > @age; select * from address", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<typeparam name="T1"></typeparam>
<typeparam name="T2"></typeparam>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="E:FreeSql.IAop.ParseExpression">
<summary>
可自定义解析表达式
@@ -4897,12 +4632,6 @@
<param name="timeout">超时</param>
<returns></returns>
</member>
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.GetAsync">
<summary>
获取资源
</summary>
<returns></returns>
</member>
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)">
<summary>
使用完毕后,归还资源
@@ -4978,12 +4707,6 @@
</summary>
<param name="obj">资源对象</param>
</member>
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnGetAsync(FreeSql.Internal.ObjectPool.Object{`0})">
<summary>
从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
</summary>
<param name="obj">资源对象</param>
</member>
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnReturn(FreeSql.Internal.ObjectPool.Object{`0})">
<summary>
归还对象给对象池的时候触发
@@ -5559,7 +5282,7 @@
</member>
<member name="M:FreeSql.CoreErrorStrings.ObjectPool_GetAsync_Queue_Long(System.Object,System.Object)">
<summary>
【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity}
【{policyName}】ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {asyncGetCapacity}
</summary>
</member>
<member name="M:FreeSql.CoreErrorStrings.OneToMany_NotFound_CorrespondingField(System.Object,System.Object,System.Object,System.Object,System.Object)">
@@ -5897,28 +5620,6 @@
对象池
</summary>
</member>
<member name="M:FreeSqlGlobalDynamicEntityExtensions.DynamicEntity(FreeSql.ICodeFirst,System.String,System.Attribute[])">
<summary>
动态构建Class Type
</summary>
<returns></returns>
</member>
<member name="M:FreeSqlGlobalDynamicEntityExtensions.CreateInstance(FreeSql.Internal.Model.TableInfo,System.Collections.Generic.Dictionary{System.String,System.Object})">
<summary>
根据字典,创建 table 对应的实体对象
</summary>
<param name="table"></param>
<param name="dict"></param>
<returns></returns>
</member>
<member name="M:FreeSqlGlobalDynamicEntityExtensions.CreateDictionary(FreeSql.Internal.Model.TableInfo,System.Object)">
<summary>
根据实体对象,创建 table 对应的字典
</summary>
<param name="table"></param>
<param name="instance"></param>
<returns></returns>
</member>
<member name="M:FreeSqlGlobalExpressionCallExtensions.Between(System.DateTime,System.DateTime,System.DateTime)">
<summary>
C# that >= between &amp;&amp; that &lt;= and<para></para>

View File

@@ -2136,6 +2136,8 @@ namespace FreeSql.Internal
//判断 [JsonMap] 并非导航对象,所以在上面提前判断 ColumnsByCs
var tb2tmp = _common.GetTableByEntity(exp2Type);
if (tb2tmp == null && exp2.NodeType == ExpressionType.Parameter && exp2Type.IsAnonymousType())
tb2tmp = tsc._tables.Find(a => a.Parameter == exp2)?.Table;
var exp2IsParameter = false;
if (tb2tmp != null)
{

View File

@@ -584,12 +584,7 @@ namespace FreeSql.Internal.CommonProvider
{
var list = source?.Select(a => (object)a).ToList();
if (list.Any() != true) throw new Exception(CoreErrorStrings.Cannot_Be_NULL_Name(nameof(source)));
var sb = new StringBuilder();
(_orm.InsertOrUpdate<object>().AsType(_tables[0].Table.Type) as InsertOrUpdateProvider<object>)
.WriteSourceSelectUnionAll(list, sb, _params, true);
try
{
if (typeof(T1) != typeof(TDto))
if (_tables[0].Table.Type != typeof(TDto))
{
if (_orm.CodeFirst.IsAutoSyncStructure)
(_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TDto)); //._dicSyced.TryAdd(typeof(TReturn), true);
@@ -600,15 +595,62 @@ namespace FreeSql.Internal.CommonProvider
ret._whereGlobalFilter = new List<GlobalFilter.Item>(_whereGlobalFilter.ToArray());
ret._cancel = _cancel;
ret._params.AddRange(_params);
if (ret._tables[0].Table == null) ret._tables[0].Table = TableInfo.GetDefaultTable(typeof(TDto));
if (ret._tables[0].Table == null)
{
var table = TableInfo.GetDefaultTable(typeof(TDto));
var colpos = new List<ColumnInfo>();
foreach (var kv in table.Properties)
{
var colName = kv.Key;
if (string.IsNullOrWhiteSpace(colName)) continue;
var colType = kv.Value.PropertyType;
if (_orm.CodeFirst.IsSyncStructureToLower) colName = colName.ToLower();
if (_orm.CodeFirst.IsSyncStructureToUpper) colName = colName.ToUpper();
var col = new ColumnInfo
{
CsName = kv.Key,
Table = table,
Attribute = new DataAnnotations.ColumnAttribute
{
Name = colName,
MapType = colType
},
CsType = colType
};
table.Columns.Add(colName, col);
table.ColumnsByCs.Add(kv.Key, col);
colpos.Add(col);
}
table.ColumnsByPosition = colpos.ToArray();
colpos.Clear();
ret._tables[0].Table = table;
}
var sb = new StringBuilder();
try
{
var upset = _orm.InsertOrUpdate<object>() as InsertOrUpdateProvider<object>;
upset._table = ret._tables[0].Table;
upset.WriteSourceSelectUnionAll(list, sb, _params, true);
ret.WithSql(sb.ToString());
return ret;
}
finally { sb.Clear(); }
}
if (_tables[0].Table.Type != typeof(object))
{
var sb = new StringBuilder();
try
{
var upset = _orm.InsertOrUpdate<object>() as InsertOrUpdateProvider<object>;
upset._table = _tables[0].Table;
upset.WriteSourceSelectUnionAll(list, sb, _params, true);
return WithSql(sb.ToString()) as ISelect<TDto>;
}
finally { sb.Clear(); }
}
throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("Select"));
}
public ISelect<TDto> WithTempQuery<TDto>(Expression<Func<T1, TDto>> selector) => InternalWithTempQuery<TDto>(selector);

View File

@@ -127,7 +127,7 @@ namespace FreeSql
/// </summary>
public static string DataType_AsType_Inconsistent(object dataDisplayCsharp, object tableTypeDisplayCsharp) => string.Format(Language == "cn" ?
@"操作的数据类型({0}) 与 AsType({1}) 不一致,请检查。" :
@"FreeSql: The data type of the operation ({0}) is inconsistent with AsType ({1}). Please check.", dataDisplayCsharp, tableTypeDisplayCsharp);
@"FreeSql: The data type of the operation ({0}) is inconsistent with AsType({1}), Please check.", dataDisplayCsharp, tableTypeDisplayCsharp);
/// <summary>
/// DateRange 要求 Value 应该逗号分割,并且长度为 2
/// </summary>
@@ -247,7 +247,7 @@ namespace FreeSql
/// </summary>
public static string Ignored_Check_Confirm_PublicGetSet(object tb2DbName, object mp2MemberName) => string.Format(Language == "cn" ?
@"{0}.{1} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public" :
@"FreeSql: {0}. {1} is ignored. Check the IsIgnore setting to make sure get/set is public", tb2DbName, mp2MemberName);
@"FreeSql: {0}.{1} is ignored, Check the IsIgnore setting to make sure get/set is public", tb2DbName, mp2MemberName);
/// <summary>
/// Include 参数类型错误
/// </summary>
@@ -319,7 +319,7 @@ namespace FreeSql
/// </summary>
public static string InsertOrUpdate_NotSuport_Generic_UseEntity(object typeofT1) => string.Format(Language == "cn" ?
@"InsertOrUpdate<>的泛型参数 不支持 {0},请传递您的实体类" :
@"FreeSql: The generic parameter for InsertOrUpdate<>does not support {0}. Pass in your entity class", typeofT1);
@"FreeSql: The generic parameter for InsertOrUpdate<>does not support {0}, Pass in your entity class", typeofT1);
/// <summary>
/// 【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll可前往 nuget 下载
/// </summary>
@@ -413,7 +413,7 @@ namespace FreeSql
/// </summary>
public static string Navigation_Bind_Number_Different(object trytbTypeName, object pnvName, object bindColumnsCount, object tbrefPrimarysLength) => string.Format(Language == "cn" ?
@"导航属性 {0}.{1} 特性 [Navigate] Bind 数目({2}) 与 外部主键数目({3}) 不相同" :
@"FreeSql: Navigation property {0}. The number of {1} attributes [Navigate] Binds ({2}) is different from the number of external primary keys ({3})", trytbTypeName, pnvName, bindColumnsCount, tbrefPrimarysLength);
@"FreeSql: Navigation property {0}.{1}, The number of attributes [Navigate] Binds ({2}) is different from the number of external primary keys ({3})", trytbTypeName, pnvName, bindColumnsCount, tbrefPrimarysLength);
/// <summary>
/// {tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a =&amp;gt; a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。
/// </summary>
@@ -431,7 +431,7 @@ namespace FreeSql
/// </summary>
public static string Navigation_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object findtbrefPkCsName) => string.Format(Language == "cn" ?
@"导航属性 {0}.{1} 没有找到对应的字段,如:{1}{3}、{1}_{3}。或者使用 [Navigate] 特性指定关系映射。" :
@"FreeSql: Navigation property {0}. {1} No corresponding fields were found, such as: {1}{3}, {1}_ {3}. Or use the [Navigate] attribute to specify the relationship mapping.", trytbTypeName, pnvName, findtbrefPkCsName);
@"FreeSql: Navigation property {0}.{1} No corresponding fields were found, such as: {1}{3}, {1}_ {3}, Or use the [Navigate] attribute to specify the relationship mapping.", trytbTypeName, pnvName, findtbrefPkCsName);
/// <summary>
/// 导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)]
/// </summary>
@@ -455,7 +455,7 @@ namespace FreeSql
/// </summary>
public static string NoPrimaryKey_UseSetDto(object tableTypeDisplayCsharp) => string.Format(Language == "cn" ?
@"{0} 没有定义主键,无法使用 SetSource请尝试 SetDto 或者 SetSource 指定临时主键" :
@"FreeSql: {0} has no primary key defined and cannot use SetSource. Try SetDto", tableTypeDisplayCsharp);
@"FreeSql: {0} has no primary key defined and cannot use SetSource, Try SetDto", tableTypeDisplayCsharp);
/// <summary>
/// 没有定义属性
/// </summary>
@@ -485,7 +485,7 @@ namespace FreeSql
/// </summary>
public static string Not_Implemented_Expression_UseAsSelect(object exp, object exp3MethodName, object exp3ArgumentsCount) => string.Format(Language == "cn" ?
@"未实现函数表达式 {0} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{1}({2})" :
@"FreeSql: Function expression {0} parsing is not implemented. Use if you are working on a navigation property collection. AsSelect (). {1} ({2})", exp, exp3MethodName, exp3ArgumentsCount);
@"FreeSql: Function expression {0} parsing is not implemented, Use if you are working on a navigation property collection, AsSelect().{1}({2})", exp, exp3MethodName, exp3ArgumentsCount);
/// <summary>
/// 未实现 MemberAccess 下的 Constant
/// </summary>
@@ -571,11 +571,11 @@ namespace FreeSql
@"【{0}】ObjectPool.{1}() timeout {2} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081" :
@"FreeSql: [{0}] ObjectPool.{1}() timeout {2} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081", policyName, GetName, totalSeconds);
/// <summary>
/// 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity}
/// 【{policyName}】ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {asyncGetCapacity}
/// </summary>
public static string ObjectPool_GetAsync_Queue_Long(object policyName, object asyncGetCapacity) => string.Format(Language == "cn" ?
@"【{0}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {1}" :
@"FreeSql: [{0}] ObjectPool. GetAsync() The queue is too long. Policy. AsyncGetCapacity = {1}", policyName, asyncGetCapacity);
@"【{0}】ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {1}" :
@"FreeSql: [{0}] ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {1}", policyName, asyncGetCapacity);
/// <summary>
/// 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName}
/// </summary>
@@ -593,7 +593,7 @@ namespace FreeSql
/// </summary>
public static string OneToMany_UseNavigate(object refpropName, object findtrytbPkCsName) => string.Format(Language == "cn" ?
@"、{0}{1}、{0}_{1}。或者使用 [Navigate] 特性指定关系映射。" :
@", {0}{1}, {0}_{1}. Or use the [Navigate] attribute to specify the relationship mapping.", refpropName, findtrytbPkCsName);
@", {0}{1}, {0}_{1}, Or use the [Navigate] attribute to specify the relationship mapping.", refpropName, findtrytbPkCsName);
/// <summary>
/// 参数 field 未指定
/// </summary>
@@ -641,7 +641,7 @@ namespace FreeSql
/// </summary>
public static string Policy_Status_NotAvailable(object policyName, object UnavailableExceptionMessage) => string.Format(Language == "cn" ?
@"【{0}】状态不可用,等待后台检查程序恢复方可使用。{1}" :
@"FreeSql: The {0} status is unavailable and cannot be used until the background checker is restored. {1}", policyName, UnavailableExceptionMessage);
@"FreeSql: The {0} status is unavailable and cannot be used until the background checker is restored, {1}", policyName, UnavailableExceptionMessage);
/// <summary>
/// 属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string并且不可为 Nullable
/// </summary>
@@ -791,7 +791,7 @@ namespace FreeSql
/// </summary>
public static string S_Access_InsertOnlyOneAtTime => Language == "cn" ?
@"蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .." :
@"FreeSql: Egg pain Accs insertion can only be performed one at a time, values (..) are not supported. (..) Select is also not supported.. UNION ALL select..";
@"FreeSql: values (..),(..) are not supported";
/// <summary>
/// BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null
/// </summary>
@@ -833,7 +833,7 @@ namespace FreeSql
/// </summary>
public static string S_ConnectionStringError_CheckProjectConnection(object thisName) => string.Format(Language == "cn" ?
@"【{0}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台x86 | x64或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台" :
@"FreeSql: [{0}] Connection string error, please check. Or check Project Properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform", thisName);
@"FreeSql: [{0}] Connection string error, please check, Or check Project Properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform", thisName);
/// <summary>
/// FreeSql.Provider.CustomAdapter 无法使用 CreateCommand
/// </summary>
@@ -935,7 +935,7 @@ namespace FreeSql
/// </summary>
public static string S_ParsingFailed_UseRestoreToSelect(object callExpMethodName, object message) => string.Format(Language == "cn" ?
@"解析失败 {0} {1},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询" :
@"FreeSql: Parsing failed {0} {1}, hint: Extension method IQueryable can be used. RestoreToSelect() reverted to ISelect re-query", callExpMethodName, message);
@"FreeSql: Parsing failed {0} {1}, hint: Extension method IQueryable.RestoreToSelect() can be used", callExpMethodName, message);
/// <summary>
/// fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键
/// </summary>