mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-03-04 13:10:57 +08:00
处理合并冲突
This commit is contained in:
@@ -12,7 +12,7 @@
|
|||||||
<!--
|
<!--
|
||||||
经常出于版本交叉问题,暂时关闭,在每个项目上设置版本号
|
经常出于版本交叉问题,暂时关闭,在每个项目上设置版本号
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|||||||
@@ -579,34 +579,34 @@ namespace base_entity
|
|||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true")
|
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true")
|
||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true")
|
//.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true")
|
||||||
//.UseAdoConnectionPool(false)
|
//.UseAdoConnectionPool(false)
|
||||||
//.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2")
|
//.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2")
|
||||||
////.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2")
|
////.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2")
|
||||||
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
|
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
|
||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2")
|
//.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2")
|
||||||
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
|
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
|
||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.Dameng, "server=127.0.0.1;port=5236;user=2user;password=123456789;database=2user;poolsize=5;")
|
//.UseConnectionString(FreeSql.DataType.Dameng, "server=127.0.0.1;port=5236;user=2user;password=123456789;database=2user;poolsize=5;")
|
||||||
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
|
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
|
||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.OdbcMySql, "Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;Persist Security Info=False;Trusted_Connection=Yes;UID=root;PWD=root;DATABASE=cccddd_odbc;Charset=utf8;SslMode=none;Max pool size=2")
|
//.UseConnectionString(FreeSql.DataType.OdbcMySql, "Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;Persist Security Info=False;Trusted_Connection=Yes;UID=root;PWD=root;DATABASE=cccddd_odbc;Charset=utf8;SslMode=none;Max pool size=2")
|
||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.OdbcSqlServer, "Driver={SQL Server};Server=.;Persist Security Info=False;Trusted_Connection=Yes;Integrated Security=True;DATABASE=freesqlTest_odbc;Pooling=true;Max pool size=3")
|
//.UseConnectionString(FreeSql.DataType.OdbcSqlServer, "Driver={SQL Server};Server=.;Persist Security Info=False;Trusted_Connection=Yes;Integrated Security=True;DATABASE=freesqlTest_odbc;Pooling=true;Max pool size=3")
|
||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.OdbcPostgreSQL, "Driver={PostgreSQL Unicode(x64)};Server=127.0.0.1;Port=5432;UID=postgres;PWD=123456;Database=tedb_odbc;Pooling=true;Maximum Pool Size=2")
|
//.UseConnectionString(FreeSql.DataType.OdbcPostgreSQL, "Driver={PostgreSQL Unicode(x64)};Server=127.0.0.1;Port=5432;UID=postgres;PWD=123456;Database=tedb_odbc;Pooling=true;Maximum Pool Size=2")
|
||||||
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
|
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
|
||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.OdbcOracle, "Driver={Oracle in XE};Server=//127.0.0.1:1521/XE;Persist Security Info=False;Trusted_Connection=Yes;UID=odbc1;PWD=123456")
|
//.UseConnectionString(FreeSql.DataType.OdbcOracle, "Driver={Oracle in XE};Server=//127.0.0.1:1521/XE;Persist Security Info=False;Trusted_Connection=Yes;UID=odbc1;PWD=123456")
|
||||||
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
|
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
|
||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.OdbcDameng, "Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236;Persist Security Info=False;Trusted_Connection=Yes;UID=USER1;PWD=123456789")
|
//.UseConnectionString(FreeSql.DataType.OdbcDameng, "Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236;Persist Security Info=False;Trusted_Connection=Yes;UID=USER1;PWD=123456789")
|
||||||
//.UseConnectionString(DataType.QuestDb, "host=localhost;port=8812;username=admin;password=quest;database=qdb;ServerCompatibilityMode=NoTypeLoading;")
|
//.UseConnectionString(DataType.QuestDb, "host=localhost;port=8812;username=admin;password=quest;database=qdb;ServerCompatibilityMode=NoTypeLoading;")
|
||||||
|
|
||||||
//.UseConnectionString(DataType.ClickHouse, "DataCompress=False;BufferSize=32768;SocketTimeout=10000;CheckCompressedHash=False;Encrypt=False;Compressor=lz4;Host=192.168.0.121;Port=8125;Database=PersonnelLocation;Username=root;Password=123")
|
//.UseConnectionString(DataType.ClickHouse, "DataCompress=False;BufferSize=32768;SocketTimeout=10000;CheckCompressedHash=False;Encrypt=False;Compressor=lz4;Host=192.168.0.121;Port=8125;Database=PersonnelLocation;Username=root;Password=123")
|
||||||
//.UseConnectionFactory(DataType.ClickHouse, () => null)
|
//.UseConnectionFactory(DataType.ClickHouse, () => null)
|
||||||
.UseMonitorCommand(cmd =>
|
.UseMonitorCommand(cmd =>
|
||||||
{
|
{
|
||||||
Console.WriteLine(cmd.CommandText + "\r\n");
|
Console.WriteLine(cmd.CommandText + "\r\n");
|
||||||
//cmd.CommandText = null; //不执行
|
//cmd.CommandText = null; //不执行
|
||||||
@@ -619,6 +619,28 @@ namespace base_entity
|
|||||||
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
|
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
fsql.Aop.AuditValue += (_, e) =>
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
var tt1 = new ProjectItem { ID = 1, MaxQuantity = 0, Code = null, Name = null };
|
||||||
|
var tt2 = new ProjectItem { ID = 1, MaxQuantity = 100, Code = null, Name = null };
|
||||||
|
var repot2 = fsql.GetRepository<ProjectItem>();
|
||||||
|
|
||||||
|
repot2.Attach(tt1);
|
||||||
|
var nt1 = repot2.Update(tt2);
|
||||||
|
|
||||||
|
fsql.Delete<User1>().Where("1=1").ExecuteAffrows();
|
||||||
|
fsql.Insert(new List<User1>
|
||||||
|
{
|
||||||
|
new User1 { Nickname = "nickname11", Username = "username11", Description = "desc11" },
|
||||||
|
new User1 { Nickname = "n2", Username = "u2", Description = "d2" },
|
||||||
|
new User1 { Nickname = "n3", Username = "u3", Description = "d3" },
|
||||||
|
}).ExecuteAffrows();
|
||||||
|
|
||||||
|
var firebirdList01 = fsql.Select<User1>().ToList();
|
||||||
|
|
||||||
fsql.UseJsonMap();
|
fsql.UseJsonMap();
|
||||||
|
|
||||||
fsql.Select<Table11>().Where(a => a.Options.Value1 == 100 && a.Options.Value2 == "xx").ToList();
|
fsql.Select<Table11>().Where(a => a.Options.Value1 == 100 && a.Options.Value2 == "xx").ToList();
|
||||||
@@ -711,17 +733,7 @@ namespace base_entity
|
|||||||
|
|
||||||
fsql.Select<User1>().Where(a => a.Id == new Guid("xxx")).ToList(a => new Guid("zzz"));
|
fsql.Select<User1>().Where(a => a.Id == new Guid("xxx")).ToList(a => new Guid("zzz"));
|
||||||
|
|
||||||
fsql.Aop.AuditValue += (_, e) =>
|
|
||||||
{
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
var tt1 = new ProjectItem { ID = 1, MaxQuantity = 0, Code = null, Name = null };
|
|
||||||
var tt2 = new ProjectItem { ID = 1, MaxQuantity = 100, Code = null, Name = null };
|
|
||||||
var repot2 = fsql.GetRepository<ProjectItem>();
|
|
||||||
|
|
||||||
repot2.Attach(tt1);
|
|
||||||
var nt1 = repot2.Update(tt2);
|
|
||||||
|
|
||||||
var fsql2 = fsql;
|
var fsql2 = fsql;
|
||||||
// 动态构建实体类型,树形结构,引用自身类型
|
// 动态构建实体类型,树形结构,引用自身类型
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Confluent.Kafka" Version="2.2.0" />
|
<PackageReference Include="Confluent.Kafka" Version="2.2.0" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||||
<PackageReference Include="Npgsql.NetTopologySuite" Version="6.0.4" />
|
|
||||||
<PackageReference Include="MessagePack" Version="2.4.35" />
|
<PackageReference Include="MessagePack" Version="2.4.35" />
|
||||||
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.5" />
|
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.5" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -94,9 +94,9 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
if (newdata == null) return null;
|
if (newdata == null) return null;
|
||||||
var _table = Orm.CodeFirst.GetTableByEntity(EntityType);
|
var _table = Orm.CodeFirst.GetTableByEntity(EntityType);
|
||||||
if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.Incomparable_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, newdata)));
|
if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.Incomparable_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, newdata)));
|
||||||
var key = Orm.GetEntityKeyString(EntityType, newdata, false);
|
var key = Orm.GetEntityKeyString(EntityType, newdata, false);
|
||||||
if (string.IsNullOrEmpty(key)) throw new Exception(DbContextStrings.Incomparable_PrimaryKey_NotSet(Orm.GetEntityString(EntityType, newdata)));
|
if (string.IsNullOrEmpty(key)) throw new Exception(DbContextErrorStrings.Incomparable_PrimaryKey_NotSet(Orm.GetEntityString(EntityType, newdata)));
|
||||||
if (_states.TryGetValue(key, out var oldState) == false || oldState == null) throw new Exception($"不可对比,数据未被跟踪:{Orm.GetEntityString(EntityType, newdata)}");
|
if (_states.TryGetValue(key, out var oldState) == false || oldState == null) throw new Exception($"不可对比,数据未被跟踪:{Orm.GetEntityString(EntityType, newdata)}");
|
||||||
AggregateRootTrackingChangeInfo tracking = new AggregateRootTrackingChangeInfo();
|
AggregateRootTrackingChangeInfo tracking = new AggregateRootTrackingChangeInfo();
|
||||||
AggregateRootUtils.CompareEntityValue(_boundaryName, Orm, EntityType, oldState, newdata, null, tracking);
|
AggregateRootUtils.CompareEntityValue(_boundaryName, Orm, EntityType, oldState, newdata, null, tracking);
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ namespace FreeSql
|
|||||||
var stateKey = Orm.GetEntityKeyString(EntityType, entity, false);
|
var stateKey = Orm.GetEntityKeyString(EntityType, entity, false);
|
||||||
if (entity == null) throw new ArgumentNullException(nameof(entity));
|
if (entity == null) throw new ArgumentNullException(nameof(entity));
|
||||||
var table = Orm.CodeFirst.GetTableByEntity(EntityType);
|
var table = Orm.CodeFirst.GetTableByEntity(EntityType);
|
||||||
if (table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, entity)));
|
if (table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotAdd_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, entity)));
|
||||||
|
|
||||||
var flagExists = ExistsInStates(entity);
|
var flagExists = ExistsInStates(entity);
|
||||||
if (flagExists == false)
|
if (flagExists == false)
|
||||||
@@ -226,6 +226,16 @@ namespace FreeSql
|
|||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async public virtual Task SaveManyAsync(TEntity entity, string propertyName, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
var tracking = new AggregateRootTrackingChangeInfo();
|
||||||
|
var stateKey = Orm.GetEntityKeyString(EntityType, entity, false);
|
||||||
|
if (_states.TryGetValue(stateKey, out var state) == false) throw new Exception($"AggregateRootRepository 使用仓储对象查询后,才可以保存数据 {Orm.GetEntityString(EntityType, entity)}");
|
||||||
|
AggregateRootUtils.CompareEntityValue(_boundaryName, Orm, EntityType, state.Value, entity, propertyName, tracking);
|
||||||
|
await SaveTrackingChangeAsync(tracking, cancellationToken);
|
||||||
|
Attach(entity); //应该只存储 propertyName 内容
|
||||||
|
}
|
||||||
|
|
||||||
async Task<int> SaveTrackingChangeAsync(AggregateRootTrackingChangeInfo tracking, CancellationToken cancellationToken)
|
async Task<int> SaveTrackingChangeAsync(AggregateRootTrackingChangeInfo tracking, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var affrows = 0;
|
var affrows = 0;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
if (data == null) return;
|
if (data == null) return;
|
||||||
var table = Orm.CodeFirst.GetTableByEntity(EntityType);
|
var table = Orm.CodeFirst.GetTableByEntity(EntityType);
|
||||||
if (table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotEdit_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, data.First())));
|
if (table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotEdit_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, data.First())));
|
||||||
_statesEditing.Clear();
|
_statesEditing.Clear();
|
||||||
_dataEditing = data;
|
_dataEditing = data;
|
||||||
foreach (var item in data)
|
foreach (var item in data)
|
||||||
@@ -216,7 +216,7 @@ namespace FreeSql
|
|||||||
var stateKey = Orm.GetEntityKeyString(EntityType, entity, false);
|
var stateKey = Orm.GetEntityKeyString(EntityType, entity, false);
|
||||||
if (entity == null) throw new ArgumentNullException(nameof(entity));
|
if (entity == null) throw new ArgumentNullException(nameof(entity));
|
||||||
var table = Orm.CodeFirst.GetTableByEntity(EntityType);
|
var table = Orm.CodeFirst.GetTableByEntity(EntityType);
|
||||||
if (table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, entity)));
|
if (table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotAdd_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, entity)));
|
||||||
|
|
||||||
var flagExists = ExistsInStates(entity);
|
var flagExists = ExistsInStates(entity);
|
||||||
if (flagExists == false)
|
if (flagExists == false)
|
||||||
|
|||||||
@@ -499,7 +499,7 @@ namespace FreeSql
|
|||||||
void LocalInclude(TableRef tbref, Expression exp)
|
void LocalInclude(TableRef tbref, Expression exp)
|
||||||
{
|
{
|
||||||
var incMethod = queryExp.Type.GetMethod("Include");
|
var incMethod = queryExp.Type.GetMethod("Include");
|
||||||
if (incMethod == null) throw new Exception(CoreStrings.RunTimeError_Reflection_IncludeMany.Replace("IncludeMany", "Include"));
|
if (incMethod == null) throw new Exception(CoreErrorStrings.RunTimeError_Reflection_IncludeMany.Replace("IncludeMany", "Include"));
|
||||||
queryExp = Expression.Call(queryExp, incMethod.MakeGenericMethod(tbref.RefEntityType),
|
queryExp = Expression.Call(queryExp, incMethod.MakeGenericMethod(tbref.RefEntityType),
|
||||||
Expression.Lambda(typeof(Func<,>).MakeGenericType(entityType, tbref.RefEntityType), exp, navigateParameterExp));
|
Expression.Lambda(typeof(Func<,>).MakeGenericType(entityType, tbref.RefEntityType), exp, navigateParameterExp));
|
||||||
}
|
}
|
||||||
@@ -508,7 +508,7 @@ namespace FreeSql
|
|||||||
var funcType = typeof(Func<,>).MakeGenericType(entityType, typeof(IEnumerable<>).MakeGenericType(tbref.RefEntityType));
|
var funcType = typeof(Func<,>).MakeGenericType(entityType, typeof(IEnumerable<>).MakeGenericType(tbref.RefEntityType));
|
||||||
var navigateSelector = Expression.Lambda(funcType, exp, navigateParameterExp);
|
var navigateSelector = Expression.Lambda(funcType, exp, navigateParameterExp);
|
||||||
var incMethod = queryExp.Type.GetMethod("IncludeMany");
|
var incMethod = queryExp.Type.GetMethod("IncludeMany");
|
||||||
if (incMethod == null) throw new Exception(CoreStrings.RunTimeError_Reflection_IncludeMany);
|
if (incMethod == null) throw new Exception(CoreErrorStrings.RunTimeError_Reflection_IncludeMany);
|
||||||
LambdaExpression navigateThen = null;
|
LambdaExpression navigateThen = null;
|
||||||
var navigateThenType = typeof(Action<>).MakeGenericType(typeof(ISelect<>).MakeGenericType(tbref.RefEntityType));
|
var navigateThenType = typeof(Action<>).MakeGenericType(typeof(ISelect<>).MakeGenericType(tbref.RefEntityType));
|
||||||
var thenParameter = Expression.Parameter(typeof(ISelect<>).MakeGenericType(tbref.RefEntityType), "then");
|
var thenParameter = Expression.Parameter(typeof(ISelect<>).MakeGenericType(tbref.RefEntityType), "then");
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>false</DelaySign>
|
<DelaySign>false</DelaySign>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -162,5 +162,18 @@ namespace FreeSql
|
|||||||
Repository.UnitOfWork = _resolveUow?.Invoke();
|
Repository.UnitOfWork = _resolveUow?.Invoke();
|
||||||
return Repository.InsertOrUpdate(this as TEntity);
|
return Repository.InsertOrUpdate(this as TEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// To completely save the navigation properties of the entity in the form of sub-tables. <br />
|
||||||
|
/// 【完整】保存导航属性,子表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="navigatePropertyName">Navigation property name</param>
|
||||||
|
public virtual void SaveMany(string navigatePropertyName)
|
||||||
|
{
|
||||||
|
if (Repository == null)
|
||||||
|
Repository = Orm.GetRepository<TEntity>();
|
||||||
|
Repository.UnitOfWork = _resolveUow?.Invoke();
|
||||||
|
Repository.SaveMany(this as TEntity, navigatePropertyName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -149,6 +149,19 @@ namespace FreeSql
|
|||||||
Repository.UnitOfWork = _resolveUow?.Invoke();
|
Repository.UnitOfWork = _resolveUow?.Invoke();
|
||||||
return Repository.InsertOrUpdateAsync(this as TEntity);
|
return Repository.InsertOrUpdateAsync(this as TEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// To completely save the navigation properties of the entity in the form of sub-tables. <br />
|
||||||
|
/// 【完整】保存导航属性,子表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="navigatePropertyName">Navigation property name</param>
|
||||||
|
public virtual Task SaveManyAsync(string navigatePropertyName)
|
||||||
|
{
|
||||||
|
if (Repository == null)
|
||||||
|
Repository = Orm.GetRepository<TEntity>();
|
||||||
|
Repository.UnitOfWork = _resolveUow?.Invoke();
|
||||||
|
return Repository.SaveManyAsync(this as TEntity, navigatePropertyName);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,7 @@ namespace FreeSql
|
|||||||
static Func<IFreeSql> _resoleOrm;
|
static Func<IFreeSql> _resoleOrm;
|
||||||
internal static Func<IUnitOfWork> _resolveUow;
|
internal static Func<IUnitOfWork> _resolveUow;
|
||||||
|
|
||||||
public static IFreeSql Orm => _resoleOrm?.Invoke() ?? throw new Exception(CoreStrings.S_BaseEntity_Initialization_Error);
|
public static IFreeSql Orm => _resoleOrm?.Invoke() ?? throw new Exception(CoreErrorStrings.S_BaseEntity_Initialization_Error);
|
||||||
|
|
||||||
public static void Initialization(IFreeSql fsql, Func<IUnitOfWork> resolveUow) => Initialization(() => fsql, resolveUow);
|
public static void Initialization(IFreeSql fsql, Func<IUnitOfWork> resolveUow) => Initialization(() => fsql, resolveUow);
|
||||||
public static void Initialization(Func<IFreeSql> resoleOrm, Func<IUnitOfWork> resolveUow)
|
public static void Initialization(Func<IFreeSql> resoleOrm, Func<IUnitOfWork> resolveUow)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>false</DelaySign>
|
<DelaySign>false</DelaySign>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,13 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSql.BaseEntity`1.SaveMany(System.String)">
|
||||||
|
<summary>
|
||||||
|
To completely save the navigation properties of the entity in the form of sub-tables. <br />
|
||||||
|
【完整】保存导航属性,子表
|
||||||
|
</summary>
|
||||||
|
<param name="navigatePropertyName">Navigation property name</param>
|
||||||
|
</member>
|
||||||
<member name="T:FreeSql.BaseEntityAsync`2">
|
<member name="T:FreeSql.BaseEntityAsync`2">
|
||||||
<summary>
|
<summary>
|
||||||
Entity base class, including CreateTime/UpdateTime/IsDeleted, the async CRUD methods, and ID primary key definition.
|
Entity base class, including CreateTime/UpdateTime/IsDeleted, the async CRUD methods, and ID primary key definition.
|
||||||
@@ -152,6 +159,13 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSql.BaseEntityAsync`1.SaveManyAsync(System.String)">
|
||||||
|
<summary>
|
||||||
|
To completely save the navigation properties of the entity in the form of sub-tables. <br />
|
||||||
|
【完整】保存导航属性,子表
|
||||||
|
</summary>
|
||||||
|
<param name="navigatePropertyName">Navigation property name</param>
|
||||||
|
</member>
|
||||||
<member name="T:FreeSql.BaseEntity">
|
<member name="T:FreeSql.BaseEntity">
|
||||||
<summary>
|
<summary>
|
||||||
Entity base class, including CreateTime/UpdateTime/IsDeleted.
|
Entity base class, including CreateTime/UpdateTime/IsDeleted.
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>false</DelaySign>
|
<DelaySign>false</DelaySign>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<Title>$(AssemblyName)</Title>
|
<Title>$(AssemblyName)</Title>
|
||||||
<IsPackable>true</IsPackable>
|
<IsPackable>true</IsPackable>
|
||||||
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>false</DelaySign>
|
<DelaySign>false</DelaySign>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public static class FreeSqlExtensionsLinqSql
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static ISelect<T1> RestoreToSelect<T1>(this IQueryable<T1> that) where T1 : class
|
public static ISelect<T1> RestoreToSelect<T1>(this IQueryable<T1> that) where T1 : class
|
||||||
{
|
{
|
||||||
var queryable = that as QueryableProvider<T1, T1> ?? throw new Exception(CoreStrings.S_CannotBeConverted_To_ISelect(typeof(T1).Name));
|
var queryable = that as QueryableProvider<T1, T1> ?? throw new Exception(CoreErrorStrings.S_CannotBeConverted_To_ISelect(typeof(T1).Name));
|
||||||
return queryable._select;
|
return queryable._select;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ namespace FreeSql.Extensions.Linq
|
|||||||
case "Average": return tplMaxMinAvgSum("Avg");
|
case "Average": return tplMaxMinAvgSum("Avg");
|
||||||
|
|
||||||
case "Concat":
|
case "Concat":
|
||||||
return throwCallExp(CoreStrings.Not_Support);
|
return throwCallExp(CoreErrorStrings.Not_Support);
|
||||||
case "Contains":
|
case "Contains":
|
||||||
if (callExp.Arguments.Count == 2)
|
if (callExp.Arguments.Count == 2)
|
||||||
{
|
{
|
||||||
@@ -141,7 +141,7 @@ namespace FreeSql.Extensions.Linq
|
|||||||
_select.Distinct();
|
_select.Distinct();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return throwCallExp(CoreStrings.Not_Support);
|
return throwCallExp(CoreErrorStrings.Not_Support);
|
||||||
|
|
||||||
case "ElementAt":
|
case "ElementAt":
|
||||||
case "ElementAtOrDefault":
|
case "ElementAtOrDefault":
|
||||||
@@ -178,7 +178,7 @@ namespace FreeSql.Extensions.Linq
|
|||||||
_select.InternalWhere(whereParam);
|
_select.InternalWhere(whereParam);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return throwCallExp(CoreStrings.Not_Support);
|
return throwCallExp(CoreErrorStrings.Not_Support);
|
||||||
|
|
||||||
case "Skip":
|
case "Skip":
|
||||||
_select.Offset((int)callExp.Arguments[1].GetConstExprValue());
|
_select.Offset((int)callExp.Arguments[1].GetConstExprValue());
|
||||||
@@ -190,7 +190,7 @@ namespace FreeSql.Extensions.Linq
|
|||||||
case "ToList":
|
case "ToList":
|
||||||
if (callExp.Arguments.Count == 1)
|
if (callExp.Arguments.Count == 1)
|
||||||
return _select.ToList();
|
return _select.ToList();
|
||||||
return throwCallExp(CoreStrings.Not_Support);
|
return throwCallExp(CoreErrorStrings.Not_Support);
|
||||||
|
|
||||||
case "Select":
|
case "Select":
|
||||||
var selectParam = (callExp.Arguments[1] as UnaryExpression)?.Operand as LambdaExpression;
|
var selectParam = (callExp.Arguments[1] as UnaryExpression)?.Operand as LambdaExpression;
|
||||||
@@ -199,7 +199,7 @@ namespace FreeSql.Extensions.Linq
|
|||||||
_select._selectExpression = selectParam;
|
_select._selectExpression = selectParam;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return throwCallExp(CoreStrings.Not_Support);
|
return throwCallExp(CoreErrorStrings.Not_Support);
|
||||||
|
|
||||||
case "Join":
|
case "Join":
|
||||||
if (callExp.Arguments.Count == 5)
|
if (callExp.Arguments.Count == 5)
|
||||||
@@ -241,13 +241,13 @@ namespace FreeSql.Extensions.Linq
|
|||||||
|
|
||||||
case "Last":
|
case "Last":
|
||||||
case "LastOrDefault":
|
case "LastOrDefault":
|
||||||
return throwCallExp(CoreStrings.Not_Support);
|
return throwCallExp(CoreErrorStrings.Not_Support);
|
||||||
|
|
||||||
case "GroupBy":
|
case "GroupBy":
|
||||||
return throwCallExp(CoreStrings.Not_Support);
|
return throwCallExp(CoreErrorStrings.Not_Support);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return throwCallExp(CoreStrings.Not_Support);
|
return throwCallExp(CoreErrorStrings.Not_Support);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tresult == null) return null;
|
if (tresult == null) return null;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>false</DelaySign>
|
<DelaySign>false</DelaySign>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -571,7 +571,7 @@ namespace FreeSql.Extensions.ZeroEntity
|
|||||||
var ta = _tableAlias.Where(a => string.Join(".", a.NavPath) == navPath).FirstOrDefault();
|
var ta = _tableAlias.Where(a => string.Join(".", a.NavPath) == navPath).FirstOrDefault();
|
||||||
if (ta?.Table.ColumnsByCs.TryGetValue(field.Last(), out var col) == true)
|
if (ta?.Table.ColumnsByCs.TryGetValue(field.Last(), out var col) == true)
|
||||||
return NativeTuple.Create($"{ta.Alias}.{_common.QuoteSqlName(col.Attribute.Name)}", col);
|
return NativeTuple.Create($"{ta.Alias}.{_common.QuoteSqlName(col.Attribute.Name)}", col);
|
||||||
throw new Exception(CoreStrings.Cannot_Match_Property(property));
|
throw new Exception(CoreErrorStrings.Cannot_Match_Property(property));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -295,12 +295,12 @@ ManyToMany 级联删除中间表(注意不删除外部根)
|
|||||||
_orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore);
|
_orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore);
|
||||||
handler?.Invoke();
|
handler?.Invoke();
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_transaction.Rollback();
|
_transaction.Rollback();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -705,6 +705,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
|
|||||||
case DataType.ShenTong:
|
case DataType.ShenTong:
|
||||||
case DataType.DuckDB:
|
case DataType.DuckDB:
|
||||||
case DataType.Firebird: //firebird 只支持单条插入 returning
|
case DataType.Firebird: //firebird 只支持单条插入 returning
|
||||||
|
case DataType.Xugu:
|
||||||
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
|
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
|
||||||
{
|
{
|
||||||
var idtval = OrmInsert(table).AppendData(data).ExecuteIdentity();
|
var idtval = OrmInsert(table).AppendData(data).ExecuteIdentity();
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
|
|||||||
|
|
||||||
case "-nameoptions":
|
case "-nameoptions":
|
||||||
ArgsNameOptions = args[a + 1].Split(',').Select(opt => opt == "1").ToArray();
|
ArgsNameOptions = args[a + 1].Split(',').Select(opt => opt == "1").ToArray();
|
||||||
if (ArgsNameOptions.Length != 4) throw new ArgumentException(CoreStrings.S_NameOptions_Incorrect);
|
if (ArgsNameOptions.Length != 4) throw new ArgumentException(CoreErrorStrings.S_NameOptions_Incorrect);
|
||||||
a++;
|
a++;
|
||||||
break;
|
break;
|
||||||
case "-namespace":
|
case "-namespace":
|
||||||
@@ -172,7 +172,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
|
|||||||
break;
|
break;
|
||||||
case "-db":
|
case "-db":
|
||||||
var dbargs = args[a + 1].Split(',', 2);
|
var dbargs = args[a + 1].Split(',', 2);
|
||||||
if (dbargs.Length != 2) throw new ArgumentException(CoreStrings.S_DB_ParameterError);
|
if (dbargs.Length != 2) throw new ArgumentException(CoreErrorStrings.S_DB_ParameterError);
|
||||||
|
|
||||||
switch (dbargs[0].Trim().ToLower())
|
switch (dbargs[0].Trim().ToLower())
|
||||||
{
|
{
|
||||||
@@ -186,7 +186,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
|
|||||||
case "kingbasees": ArgsDbType = DataType.KingbaseES; break;
|
case "kingbasees": ArgsDbType = DataType.KingbaseES; break;
|
||||||
case "shentong": ArgsDbType = DataType.ShenTong; break;
|
case "shentong": ArgsDbType = DataType.ShenTong; break;
|
||||||
case "clickhouse": ArgsDbType = DataType.ClickHouse; break;
|
case "clickhouse": ArgsDbType = DataType.ClickHouse; break;
|
||||||
default: throw new ArgumentException(CoreStrings.S_DB_ParameterError_UnsupportedType(dbargs[0]));
|
default: throw new ArgumentException(CoreErrorStrings.S_DB_ParameterError_UnsupportedType(dbargs[0]));
|
||||||
}
|
}
|
||||||
ArgsConnectionString = dbargs[1].Trim();
|
ArgsConnectionString = dbargs[1].Trim();
|
||||||
a++;
|
a++;
|
||||||
@@ -225,11 +225,11 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
|
|||||||
a++;
|
a++;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new ArgumentException(CoreStrings.S_WrongParameter(args[a]));
|
throw new ArgumentException(CoreErrorStrings.S_WrongParameter(args[a]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(ArgsConnectionString)) throw new ArgumentException(CoreStrings.S_DB_Parameter_Error_NoConnectionString);
|
if (string.IsNullOrEmpty(ArgsConnectionString)) throw new ArgumentException(CoreErrorStrings.S_DB_Parameter_Error_NoConnectionString);
|
||||||
|
|
||||||
RazorEngine.Engine.Razor = RazorEngineService.Create(new RazorEngine.Configuration.TemplateServiceConfiguration
|
RazorEngine.Engine.Razor = RazorEngineService.Create(new RazorEngine.Configuration.TemplateServiceConfiguration
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
<PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
|
||||||
<RepositoryUrl>https://github.com/2881099/FreeSql</RepositoryUrl>
|
<RepositoryUrl>https://github.com/2881099/FreeSql</RepositoryUrl>
|
||||||
<PackageTags>FreeSql DbFirst 实体生成器</PackageTags>
|
<PackageTags>FreeSql DbFirst 实体生成器</PackageTags>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>false</DelaySign>
|
<DelaySign>false</DelaySign>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ namespace FreeSql
|
|||||||
public abstract partial class DbContext : IDisposable
|
public abstract partial class DbContext : IDisposable
|
||||||
{
|
{
|
||||||
internal DbContextScopedFreeSql _ormScoped;
|
internal DbContextScopedFreeSql _ormScoped;
|
||||||
internal IFreeSql OrmOriginal => _ormScoped?._originalFsql ?? throw new ArgumentNullException(DbContextStrings.ConfigureUseFreeSql);
|
internal IFreeSql OrmOriginal => _ormScoped?._originalFsql ?? throw new ArgumentNullException(DbContextErrorStrings.ConfigureUseFreeSql);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 该对象 Select/Delete/Insert/Update/InsertOrUpdate 与 DbContext 事务保持一致,可省略传递 WithTransaction
|
/// 该对象 Select/Delete/Insert/Update/InsertOrUpdate 与 DbContext 事务保持一致,可省略传递 WithTransaction
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IFreeSql Orm => _ormScoped ?? throw new ArgumentNullException(DbContextStrings.ConfigureUseFreeSql);
|
public IFreeSql Orm => _ormScoped ?? throw new ArgumentNullException(DbContextErrorStrings.ConfigureUseFreeSql);
|
||||||
|
|
||||||
#region Property UnitOfWork
|
#region Property UnitOfWork
|
||||||
internal bool _isUseUnitOfWork = true; //是否创建工作单元事务
|
internal bool _isUseUnitOfWork = true; //是否创建工作单元事务
|
||||||
@@ -135,7 +135,7 @@ namespace FreeSql
|
|||||||
void CheckEntityTypeOrThrow(Type entityType)
|
void CheckEntityTypeOrThrow(Type entityType)
|
||||||
{
|
{
|
||||||
if (OrmOriginal.CodeFirst.GetTableByEntity(entityType) == null)
|
if (OrmOriginal.CodeFirst.GetTableByEntity(entityType) == null)
|
||||||
throw new ArgumentException(DbContextStrings.ParameterDataTypeError(entityType.FullName));
|
throw new ArgumentException(DbContextErrorStrings.ParameterDataTypeError(entityType.FullName));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 添加
|
/// 添加
|
||||||
|
|||||||
265
FreeSql.DbContext/DbContext/DbContextErrorStrings.cs
Normal file
265
FreeSql.DbContext/DbContext/DbContextErrorStrings.cs
Normal file
@@ -0,0 +1,265 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FreeSql
|
||||||
|
{
|
||||||
|
public static class DbContextErrorStrings
|
||||||
|
{
|
||||||
|
public static string Language = "en";
|
||||||
|
/// <summary>
|
||||||
|
/// AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入
|
||||||
|
/// </summary>
|
||||||
|
public static string AddFreeDbContextError_CheckConstruction(object dbContextTypeName) => Language == "cn" ?
|
||||||
|
$@"AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入" :
|
||||||
|
$@"FreeSql: An error occurred in AddFreeDbContext, check that the construction parameters of {dbContextTypeName} have been injected correctly";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可添加,已存在于状态管理:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotAdd_AlreadyExistsInStateManagement(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可添加,已存在于状态管理:{entityString}" :
|
||||||
|
$@"FreeSql: Not addable, already exists in state management: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可添加,实体没有主键:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotAdd_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可添加,实体没有主键:{entityString}" :
|
||||||
|
$@"FreeSql: Not addable, entity has no primary key: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可添加,未设置主键的值:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotAdd_PrimaryKey_NotSet(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可添加,未设置主键的值:{entityString}" :
|
||||||
|
$@"FreeSql: Not addable, no value for primary key set: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可添加,自增属性有值:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotAdd_SelfIncreasingHasValue(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可添加,自增属性有值:{entityString}" :
|
||||||
|
$@"FreeSql: Not addable, self-increasing attribute has value: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可附加,实体没有主键:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotAttach_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可附加,实体没有主键:{entityString}" :
|
||||||
|
$@"FreeSql: Not attachable, entity has no primary key: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可附加,未设置主键的值:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotAttach_PrimaryKey_NotSet(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可附加,未设置主键的值:{entityString}" :
|
||||||
|
$@"FreeSql: Not attachable, no value for primary key set: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可删除,数据未被跟踪,应该先查询:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotDelete_DataNotTracked_ShouldQuery(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可删除,数据未被跟踪,应该先查询:{entityString}" :
|
||||||
|
$@"FreeSql: Not deletable, data not tracked, should query first: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可删除,实体没有主键:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotDelete_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可删除,实体没有主键:{entityString}" :
|
||||||
|
$@"FreeSql: Not deletable, entity has no primary key: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可删除,未设置主键的值:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotDelete_PrimaryKey_NotSet(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可删除,未设置主键的值:{entityString}" :
|
||||||
|
$@"FreeSql: Not deletable, no value for primary key set: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可进行编辑,实体没有主键:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotEdit_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可进行编辑,实体没有主键:{entityString}" :
|
||||||
|
$@"FreeSql: Not editable, entity has no primary key: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotUpdate_DataShouldQueryOrAttach(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString}" :
|
||||||
|
$@"FreeSql: Not updatable, data not tracked, should be queried first or Attach:{entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可更新,实体没有主键:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotUpdate_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可更新,实体没有主键:{entityString}" :
|
||||||
|
$@"FreeSql: Not updatable, entity has no primary key: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可更新,未设置主键的值:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotUpdate_PrimaryKey_NotSet(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可更新,未设置主键的值:{entityString}" :
|
||||||
|
$@"FreeSql: Not updatable, no value for primary key set: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可更新,数据库不存在该记录:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string CannotUpdate_RecordDoesNotExist(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可更新,数据库不存在该记录:{entityString}" :
|
||||||
|
$@"FreeSql: Not updatable, the record does not exist in the database: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql
|
||||||
|
/// </summary>
|
||||||
|
public static string ConfigureUseFreeSql => Language == "cn" ?
|
||||||
|
@"请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql" :
|
||||||
|
@"FreeSql: Please configure UseFreeSql in OnConfiguring or AddFreeDbContext";
|
||||||
|
/// <summary>
|
||||||
|
/// DbSet.AsType 参数错误,请传入正确的实体类型
|
||||||
|
/// </summary>
|
||||||
|
public static string DbSetAsType_NotSupport_Object => Language == "cn" ?
|
||||||
|
@"DbSet.AsType 参数错误,请传入正确的实体类型" :
|
||||||
|
@"FreeSql: DbSet. AsType parameter error, please pass in the correct entity type";
|
||||||
|
/// <summary>
|
||||||
|
/// 实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法
|
||||||
|
/// </summary>
|
||||||
|
public static string EntityType_CannotConvert(object EntityTypeName, object name) => Language == "cn" ?
|
||||||
|
$@"实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法" :
|
||||||
|
$@"FreeSql: Entity type {EntityTypeName} cannot be converted to {name} and cannot use this method";
|
||||||
|
/// <summary>
|
||||||
|
/// 实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法
|
||||||
|
/// </summary>
|
||||||
|
public static string EntityType_PrimaryKeyError(object EntityTypeName, object fullName) => Language == "cn" ?
|
||||||
|
$@"实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法" :
|
||||||
|
$@"FreeSql: Entity type {EntityTypeName} Primary key type is not {fullName} and cannot be used with this method";
|
||||||
|
/// <summary>
|
||||||
|
/// 实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法
|
||||||
|
/// </summary>
|
||||||
|
public static string EntityType_PrimaryKeyIsNotOne(object EntityTypeName) => Language == "cn" ?
|
||||||
|
$@"实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法" :
|
||||||
|
$@"FreeSql: Entity type {EntityTypeName} Primary key number is not 1 and cannot be used with this method";
|
||||||
|
/// <summary>
|
||||||
|
/// FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository
|
||||||
|
/// </summary>
|
||||||
|
public static string FailedSetFilter_NotBelongIRpository => Language == "cn" ?
|
||||||
|
@"FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository" :
|
||||||
|
@"FreeSql: FreeSql. Repository failed to set filter because object does not belong to IRepository";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可比较,实体没有主键:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string Incomparable_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可比较,实体没有主键:{entityString}" :
|
||||||
|
$@"FreeSql: Not comparable, entity has no primary key: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 不可比较,未设置主键的值:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string Incomparable_PrimaryKey_NotSet(object entityString) => Language == "cn" ?
|
||||||
|
$@"不可比较,未设置主键的值:{entityString}" :
|
||||||
|
$@"FreeSql: Non-comparable, no value for primary key set: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string InsertError_Filter(object filterKey, object filterValueExpression, object entityString) => Language == "cn" ?
|
||||||
|
$@"FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString}" :
|
||||||
|
$@"FreeSql: FreeSql.Repository Insert failed because the filter {filterKey}: {filterValueExpression} was set and the inserted data does not conform to {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// ISelect.AsType 参数不支持指定为 object
|
||||||
|
/// </summary>
|
||||||
|
public static string ISelectAsType_ParameterError => Language == "cn" ?
|
||||||
|
@"ISelect.AsType 参数不支持指定为 object" :
|
||||||
|
@"FreeSql: ISelect. AsType parameter does not support specifying as object";
|
||||||
|
/// <summary>
|
||||||
|
/// {tableTypeFullName} 不存在属性 {propertyName}
|
||||||
|
/// </summary>
|
||||||
|
public static string NotFound_Property(object propertyName, object tableTypeFullName) => Language == "cn" ?
|
||||||
|
$@"{tableTypeFullName} 不存在属性 {propertyName}" :
|
||||||
|
$@"FreeSql: Property {propertyName} does not exist for {tableTypeFullName}";
|
||||||
|
/// <summary>
|
||||||
|
/// 找不到方法 DbSet&lt;&gt;.StatesRemoveByObjects
|
||||||
|
/// </summary>
|
||||||
|
public static string NotFoundMethod_StatesRemoveByObjects => Language == "cn" ?
|
||||||
|
@"找不到方法 DbSet<>.StatesRemoveByObjects" :
|
||||||
|
@"FreeSql: Method DbSet<> not found. StatesRemoveByObjects";
|
||||||
|
/// <summary>
|
||||||
|
/// 参数 data 类型错误 {entityTypeFullName}
|
||||||
|
/// </summary>
|
||||||
|
public static string ParameterDataTypeError(object entityTypeFullName) => Language == "cn" ?
|
||||||
|
$@"参数 data 类型错误 {entityTypeFullName} " :
|
||||||
|
$@"FreeSql: Parameter data type error {entityTypeFullName}";
|
||||||
|
/// <summary>
|
||||||
|
/// 参数错误 {param}
|
||||||
|
/// </summary>
|
||||||
|
public static string ParameterError(object param) => Language == "cn" ?
|
||||||
|
$@"参数错误 {param}" :
|
||||||
|
$@"FreeSql: Parameter error {param}";
|
||||||
|
/// <summary>
|
||||||
|
/// 参数错误 {param} 不能为 null
|
||||||
|
/// </summary>
|
||||||
|
public static string ParameterError_CannotBeNull(object param) => Language == "cn" ?
|
||||||
|
$@"参数错误 {param} 不能为 null" :
|
||||||
|
$@"FreeSql: Parameter error {param} cannot be null";
|
||||||
|
/// <summary>
|
||||||
|
/// 参数错误 {many} 不是集合属性
|
||||||
|
/// </summary>
|
||||||
|
public static string ParameterError_IsNot_CollectionProperties(object many) => Language == "cn" ?
|
||||||
|
$@"参数错误 {many} 不是集合属性" :
|
||||||
|
$@"FreeSql: Parameter error {many} is not a collection property";
|
||||||
|
/// <summary>
|
||||||
|
/// 参数错误 {many} 集合属性不存在
|
||||||
|
/// </summary>
|
||||||
|
public static string ParameterError_NotFound_CollectionProperties(object many) => Language == "cn" ?
|
||||||
|
$@"参数错误 {many} 集合属性不存在" :
|
||||||
|
$@"FreeSql: Parameter error {many} Collection property does not exist";
|
||||||
|
/// <summary>
|
||||||
|
/// 参数错误 {one} 属性不存在
|
||||||
|
/// </summary>
|
||||||
|
public static string ParameterError_NotFound_Property(object one) => Language == "cn" ?
|
||||||
|
$@"参数错误 {one} 属性不存在" :
|
||||||
|
$@"FreeSql: Parameter error {one} attribute does not exist";
|
||||||
|
/// <summary>
|
||||||
|
/// Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常
|
||||||
|
/// </summary>
|
||||||
|
public static string Propagation_Mandatory => Language == "cn" ?
|
||||||
|
@"Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常" :
|
||||||
|
@"FreeSql: Propagation_ Mandatory: With the current transaction, throw an exception if there is no current transaction";
|
||||||
|
/// <summary>
|
||||||
|
/// Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常
|
||||||
|
/// </summary>
|
||||||
|
public static string Propagation_Never => Language == "cn" ?
|
||||||
|
@"Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常" :
|
||||||
|
@"FreeSql: Propagation_ Never: Perform the operation non-transactionally and throw an exception if the current transaction exists";
|
||||||
|
/// <summary>
|
||||||
|
/// {tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性
|
||||||
|
/// </summary>
|
||||||
|
public static string PropertyOfType_IsNot_OneToManyOrManyToMany(object propertyName, object tableTypeFullName) => Language == "cn" ?
|
||||||
|
$@"{tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性" :
|
||||||
|
$@"FreeSql: Property {propertyName} of type {tableTypeFullName} is not OneToMany or ManyToMany attribute";
|
||||||
|
/// <summary>
|
||||||
|
/// 特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配
|
||||||
|
/// </summary>
|
||||||
|
public static string SpecialError_BatchAdditionFailed(object dataType) => Language == "cn" ?
|
||||||
|
$@"特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配" :
|
||||||
|
$@"FreeSql: Special error: Bulk add failed, {dataType} returned data, does not match the number added";
|
||||||
|
/// <summary>
|
||||||
|
/// 特别错误:更新失败,数据未被跟踪:{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string SpecialError_UpdateFailedDataNotTracked(object entityString) => Language == "cn" ?
|
||||||
|
$@"特别错误:更新失败,数据未被跟踪:{entityString}" :
|
||||||
|
$@"FreeSql: Special error: Update failed, data not tracked: {entityString}";
|
||||||
|
/// <summary>
|
||||||
|
/// 已开启事务,不能禁用工作单元
|
||||||
|
/// </summary>
|
||||||
|
public static string TransactionHasBeenStarted => Language == "cn" ?
|
||||||
|
@"已开启事务,不能禁用工作单元" :
|
||||||
|
@"FreeSql: Transaction opened, unit of work cannot be disabled";
|
||||||
|
/// <summary>
|
||||||
|
/// {tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性
|
||||||
|
/// </summary>
|
||||||
|
public static string TypeHasSetProperty_IgnoreAttribute(object tableTypeFullName, object propertyName) => Language == "cn" ?
|
||||||
|
$@"{tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性" :
|
||||||
|
$@"FreeSql: The {tableTypeFullName} type has set the property {propertyName} Ignore the attribute";
|
||||||
|
/// <summary>
|
||||||
|
/// {unitOfWorkManager} 构造参数 {fsql} 不能为 null
|
||||||
|
/// </summary>
|
||||||
|
public static string UnitOfWorkManager_Construction_CannotBeNull(object unitOfWorkManager, object fsql) => Language == "cn" ?
|
||||||
|
$@"{unitOfWorkManager} 构造参数 {fsql} 不能为 null" :
|
||||||
|
$@"FreeSql: The {unitOfWorkManager} constructor parameter {fsql} cannot be null";
|
||||||
|
/// <summary>
|
||||||
|
/// FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString}
|
||||||
|
/// </summary>
|
||||||
|
public static string UpdateError_Filter(object filterKey, object filterValueExpression, object entityString) => Language == "cn" ?
|
||||||
|
$@"FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString}" :
|
||||||
|
$@"FreeSql: FreeSql.Repository Update failed because the filter {filterKey}: {filterValueExpression} is set and the updated data does not conform to {entityString}";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -162,10 +162,10 @@ namespace FreeSql
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public DbSet<TEntity> AsType(Type entityType)
|
public DbSet<TEntity> AsType(Type entityType)
|
||||||
{
|
{
|
||||||
if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("DbSet"));
|
if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("DbSet"));
|
||||||
if (entityType == _entityType) return this;
|
if (entityType == _entityType) return this;
|
||||||
var newtb = _db.OrmOriginal.CodeFirst.GetTableByEntity(entityType);
|
var newtb = _db.OrmOriginal.CodeFirst.GetTableByEntity(entityType);
|
||||||
_tablePriv = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("DbSet"));
|
_tablePriv = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("DbSet"));
|
||||||
_tableIdentitysPriv = null;
|
_tableIdentitysPriv = null;
|
||||||
_tableReturnColumnsPriv = null;
|
_tableReturnColumnsPriv = null;
|
||||||
_entityType = entityType;
|
_entityType = entityType;
|
||||||
@@ -220,16 +220,21 @@ namespace FreeSql
|
|||||||
void AttachPriv(IEnumerable<TEntity> data, bool isAuditValue)
|
void AttachPriv(IEnumerable<TEntity> data, bool isAuditValue)
|
||||||
{
|
{
|
||||||
if (data == null || data.Any() == false) return;
|
if (data == null || data.Any() == false) return;
|
||||||
if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAttach_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data.First())));
|
if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotAttach_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data.First())));
|
||||||
foreach (var item in data)
|
foreach (var item in data)
|
||||||
{
|
{
|
||||||
if (isAuditValue)
|
if (isAuditValue)
|
||||||
{
|
{
|
||||||
FreeSql.Internal.CommonProvider.UpdateProvider<TEntity>.AuditDataValue(this, item, _db.OrmOriginal, _table, null); //与 CanUpdate 同步
|
foreach (var col in _table.Columns.Values) //#1746
|
||||||
|
{
|
||||||
|
object val = col.GetValue(item);
|
||||||
|
if (val == null && col.Attribute.MapType == typeof(string) && col.Attribute.IsNullable == false)
|
||||||
|
col.SetValue(item, val = "");
|
||||||
|
}
|
||||||
_db.Options.AuditValue?.Invoke(new DbContextAuditValueEventArgs(Aop.AuditValueType.Update, _table.Type, item));
|
_db.Options.AuditValue?.Invoke(new DbContextAuditValueEventArgs(Aop.AuditValueType.Update, _table.Type, item));
|
||||||
}
|
}
|
||||||
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, item, false);
|
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, item, false);
|
||||||
if (string.IsNullOrEmpty(key)) throw new Exception(DbContextStrings.CannotAttach_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, item)));
|
if (string.IsNullOrEmpty(key)) throw new Exception(DbContextErrorStrings.CannotAttach_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, item)));
|
||||||
|
|
||||||
_states.AddOrUpdate(key, k => CreateEntityState(item), (k, ov) =>
|
_states.AddOrUpdate(key, k => CreateEntityState(item), (k, ov) =>
|
||||||
{
|
{
|
||||||
@@ -264,9 +269,9 @@ namespace FreeSql
|
|||||||
public Dictionary<string, object[]> CompareState(TEntity newdata)
|
public Dictionary<string, object[]> CompareState(TEntity newdata)
|
||||||
{
|
{
|
||||||
if (newdata == null) return null;
|
if (newdata == null) return null;
|
||||||
if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.Incomparable_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, newdata)));
|
if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.Incomparable_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, newdata)));
|
||||||
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, newdata, false);
|
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, newdata, false);
|
||||||
if (string.IsNullOrEmpty(key)) throw new Exception(DbContextStrings.Incomparable_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, newdata)));
|
if (string.IsNullOrEmpty(key)) throw new Exception(DbContextErrorStrings.Incomparable_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, newdata)));
|
||||||
if (_states.TryGetValue(key, out var oldState) == false || oldState == null)
|
if (_states.TryGetValue(key, out var oldState) == false || oldState == null)
|
||||||
return _table.ColumnsByCs.ToDictionary(a => a.Key, a => new object[]
|
return _table.ColumnsByCs.ToDictionary(a => a.Key, a => new object[]
|
||||||
{
|
{
|
||||||
@@ -326,7 +331,7 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
if (_table.Primarys.Any() == false)
|
if (_table.Primarys.Any() == false)
|
||||||
{
|
{
|
||||||
if (isThrow) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (isThrow) throw new Exception(DbContextErrorStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
FreeSql.Internal.CommonProvider.InsertProvider<TEntity>.AuditDataValue(this, data, _db.OrmOriginal, _table, null);
|
FreeSql.Internal.CommonProvider.InsertProvider<TEntity>.AuditDataValue(this, data, _db.OrmOriginal, _table, null);
|
||||||
@@ -350,7 +355,7 @@ namespace FreeSql
|
|||||||
default:
|
default:
|
||||||
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
|
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
|
||||||
return true;
|
return true;
|
||||||
if (isThrow) throw new Exception(DbContextStrings.CannotAdd_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (isThrow) throw new Exception(DbContextErrorStrings.CannotAdd_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -359,14 +364,14 @@ namespace FreeSql
|
|||||||
//不可添加,已存在于状态管理
|
//不可添加,已存在于状态管理
|
||||||
//if (_states.ContainsKey(key))
|
//if (_states.ContainsKey(key))
|
||||||
//{
|
//{
|
||||||
// if (isThrow) throw new Exception(DbContextStrings.CannotAdd_AlreadyExistsInStateManagement(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
// if (isThrow) throw new Exception(DbContextErrorStrings.CannotAdd_AlreadyExistsInStateManagement(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
// return false;
|
// return false;
|
||||||
//}
|
//}
|
||||||
if (_db.OrmOriginal.Ado.DataType == DataType.ClickHouse) return true;
|
if (_db.OrmOriginal.Ado.DataType == DataType.ClickHouse) return true;
|
||||||
var idval = _db.OrmOriginal.GetEntityIdentityValueWithPrimary(_entityType, data);
|
var idval = _db.OrmOriginal.GetEntityIdentityValueWithPrimary(_entityType, data);
|
||||||
if (idval > 0)
|
if (idval > 0)
|
||||||
{
|
{
|
||||||
if (isThrow) throw new Exception(DbContextStrings.CannotAdd_SelfIncreasingHasValue(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (isThrow) throw new Exception(DbContextErrorStrings.CannotAdd_SelfIncreasingHasValue(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -393,7 +398,7 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
if (_table.Primarys.Any() == false)
|
if (_table.Primarys.Any() == false)
|
||||||
{
|
{
|
||||||
if (isThrow) throw new Exception(DbContextStrings.CannotUpdate_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (isThrow) throw new Exception(DbContextErrorStrings.CannotUpdate_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
FreeSql.Internal.CommonProvider.UpdateProvider<TEntity>.AuditDataValue(this, data, _db.OrmOriginal, _table, null);
|
FreeSql.Internal.CommonProvider.UpdateProvider<TEntity>.AuditDataValue(this, data, _db.OrmOriginal, _table, null);
|
||||||
@@ -401,12 +406,12 @@ namespace FreeSql
|
|||||||
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, false);
|
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, false);
|
||||||
if (string.IsNullOrEmpty(key))
|
if (string.IsNullOrEmpty(key))
|
||||||
{
|
{
|
||||||
if (isThrow) throw new Exception(DbContextStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (isThrow) throw new Exception(DbContextErrorStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (_states.TryGetValue(key, out var tryval) == false)
|
if (_states.TryGetValue(key, out var tryval) == false)
|
||||||
{
|
{
|
||||||
if (isThrow) throw new Exception(DbContextStrings.CannotUpdate_DataShouldQueryOrAttach(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (isThrow) throw new Exception(DbContextErrorStrings.CannotUpdate_DataShouldQueryOrAttach(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -432,13 +437,13 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
if (_table.Primarys.Any() == false)
|
if (_table.Primarys.Any() == false)
|
||||||
{
|
{
|
||||||
if (isThrow) throw new Exception(DbContextStrings.CannotDelete_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (isThrow) throw new Exception(DbContextErrorStrings.CannotDelete_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, false);
|
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, false);
|
||||||
if (string.IsNullOrEmpty(key))
|
if (string.IsNullOrEmpty(key))
|
||||||
{
|
{
|
||||||
if (isThrow) throw new Exception(DbContextStrings.CannotDelete_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (isThrow) throw new Exception(DbContextErrorStrings.CannotDelete_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//if (_states.TryGetValue(key, out var tryval) == false) {
|
//if (_states.TryGetValue(key, out var tryval) == false) {
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ namespace FreeSql
|
|||||||
case DataType.ShenTong:
|
case DataType.ShenTong:
|
||||||
case DataType.DuckDB:
|
case DataType.DuckDB:
|
||||||
case DataType.Firebird: //firebird 只支持单条插入 returning
|
case DataType.Firebird: //firebird 只支持单条插入 returning
|
||||||
|
case DataType.Xugu:
|
||||||
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
|
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
|
||||||
{
|
{
|
||||||
await DbContextFlushCommandAsync(cancellationToken);
|
await DbContextFlushCommandAsync(cancellationToken);
|
||||||
@@ -119,7 +120,7 @@ namespace FreeSql
|
|||||||
case DataType.DuckDB:
|
case DataType.DuckDB:
|
||||||
await DbContextFlushCommandAsync(cancellationToken);
|
await DbContextFlushCommandAsync(cancellationToken);
|
||||||
var rets = await this.OrmInsert(data).ExecuteInsertedAsync(cancellationToken);
|
var rets = await this.OrmInsert(data).ExecuteInsertedAsync(cancellationToken);
|
||||||
if (rets.Count != data.Count()) throw new Exception(DbContextStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType));
|
if (rets.Count != data.Count()) throw new Exception(DbContextErrorStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType));
|
||||||
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a, Type = DbContext.EntityChangeType.Insert }));
|
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a, Type = DbContext.EntityChangeType.Insert }));
|
||||||
var idx = 0;
|
var idx = 0;
|
||||||
foreach (var s in data)
|
foreach (var s in data)
|
||||||
@@ -149,6 +150,65 @@ namespace FreeSql
|
|||||||
await AddOrUpdateNavigateAsync(item, true, null, cancellationToken);
|
await AddOrUpdateNavigateAsync(item, true, null, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async public Task SaveManyAsync(TEntity item, string propertyName, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
if (item == null) return;
|
||||||
|
if (string.IsNullOrEmpty(propertyName)) return;
|
||||||
|
if (_table.Properties.TryGetValue(propertyName, out var prop) == false) throw new KeyNotFoundException(DbContextErrorStrings.NotFound_Property(_table.Type.FullName, propertyName));
|
||||||
|
if (_table.ColumnsByCsIgnore.ContainsKey(propertyName)) throw new ArgumentException(DbContextErrorStrings.TypeHasSetProperty_IgnoreAttribute(_table.Type.FullName, propertyName));
|
||||||
|
|
||||||
|
var tref = _table.GetTableRef(propertyName, true, false);
|
||||||
|
if (tref == null) return;
|
||||||
|
switch (tref.RefType)
|
||||||
|
{
|
||||||
|
case TableRefType.OneToOne:
|
||||||
|
case TableRefType.ManyToOne:
|
||||||
|
case TableRefType.PgArrayToMany:
|
||||||
|
throw new ArgumentException(DbContextErrorStrings.PropertyOfType_IsNot_OneToManyOrManyToMany(_table.Type.FullName, propertyName));
|
||||||
|
}
|
||||||
|
|
||||||
|
await DbContextFlushCommandAsync(cancellationToken);
|
||||||
|
var oldEnable = _db.Options.EnableCascadeSave;
|
||||||
|
_db.Options.EnableCascadeSave = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await AddOrUpdateNavigateAsync(item, false, propertyName, cancellationToken);
|
||||||
|
if (tref.RefType == TableRefType.OneToMany)
|
||||||
|
{
|
||||||
|
await DbContextFlushCommandAsync(cancellationToken);
|
||||||
|
//删除没有保存的数据,求出主体的条件
|
||||||
|
var deleteWhereParentParam = Expression.Parameter(typeof(object), "a");
|
||||||
|
Expression whereParentExp = null;
|
||||||
|
for (var colidx = 0; colidx < tref.Columns.Count; colidx++)
|
||||||
|
{
|
||||||
|
var whereExp = Expression.Equal(
|
||||||
|
Expression.MakeMemberAccess(Expression.Convert(deleteWhereParentParam, tref.RefEntityType), tref.RefColumns[colidx].Table.Properties[tref.RefColumns[colidx].CsName]),
|
||||||
|
Expression.Constant(
|
||||||
|
FreeSql.Internal.Utils.GetDataReaderValue(
|
||||||
|
tref.Columns[colidx].CsType,
|
||||||
|
_db.OrmOriginal.GetEntityValueWithPropertyName(_table.Type, item, tref.Columns[colidx].CsName)), tref.RefColumns[colidx].CsType)
|
||||||
|
);
|
||||||
|
if (whereParentExp == null) whereParentExp = whereExp;
|
||||||
|
else whereParentExp = Expression.AndAlso(whereParentExp, whereExp);
|
||||||
|
}
|
||||||
|
var propValEach = GetItemValue(item, prop) as IEnumerable;
|
||||||
|
var subDelete = _db.OrmOriginal.Delete<object>().AsType(tref.RefEntityType)
|
||||||
|
.WithTransaction(_uow?.GetOrBeginTransaction())
|
||||||
|
.Where(Expression.Lambda<Func<object, bool>>(whereParentExp, deleteWhereParentParam));
|
||||||
|
foreach (var propValItem in propValEach)
|
||||||
|
{
|
||||||
|
subDelete.WhereDynamic(propValEach, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
await subDelete.ExecuteAffrowsAsync(cancellationToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_db.Options.EnableCascadeSave = oldEnable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async Task AddOrUpdateNavigateAsync(TEntity item, bool isAdd, string propertyName, CancellationToken cancellationToken)
|
async Task AddOrUpdateNavigateAsync(TEntity item, bool isAdd, string propertyName, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
Func<PropertyInfo, Task> action = async prop =>
|
Func<PropertyInfo, Task> action = async prop =>
|
||||||
@@ -321,7 +381,7 @@ namespace FreeSql
|
|||||||
|
|
||||||
if (_states.TryGetValue(uplst1.Key, out var lstval1) == false) return -999;
|
if (_states.TryGetValue(uplst1.Key, out var lstval1) == false) return -999;
|
||||||
var lstval2 = default(EntityState);
|
var lstval2 = default(EntityState);
|
||||||
if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception(DbContextStrings.SpecialError_UpdateFailedDataNotTracked(_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value)));
|
if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception(DbContextErrorStrings.SpecialError_UpdateFailedDataNotTracked(_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value)));
|
||||||
|
|
||||||
var cuig1 = _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst1.Value, lstval1.Value, true);
|
var cuig1 = _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst1.Value, lstval1.Value, true);
|
||||||
var cuig2 = uplst2 != null ? _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst2.Value, lstval2.Value, true) : null;
|
var cuig2 = uplst2 != null ? _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst2.Value, lstval2.Value, true) : null;
|
||||||
@@ -373,11 +433,11 @@ namespace FreeSql
|
|||||||
async public Task UpdateAsync(TEntity data, CancellationToken cancellationToken = default)
|
async public Task UpdateAsync(TEntity data, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var exists = ExistsInStates(data);
|
var exists = ExistsInStates(data);
|
||||||
if (exists == null) throw new Exception(DbContextStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (exists == null) throw new Exception(DbContextErrorStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
if (exists == false)
|
if (exists == false)
|
||||||
{
|
{
|
||||||
var olddata = await OrmSelect(data).FirstAsync(cancellationToken);
|
var olddata = await OrmSelect(data).FirstAsync(cancellationToken);
|
||||||
if (olddata == null) throw new Exception(DbContextStrings.CannotUpdate_RecordDoesNotExist(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (olddata == null) throw new Exception(DbContextErrorStrings.CannotUpdate_RecordDoesNotExist(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
}
|
}
|
||||||
|
|
||||||
await UpdateRangePrivAsync(new[] { data }, true, cancellationToken);
|
await UpdateRangePrivAsync(new[] { data }, true, cancellationToken);
|
||||||
@@ -418,7 +478,16 @@ namespace FreeSql
|
|||||||
async Task<int> DbContextBatchRemoveAsync(EntityState[] dels, CancellationToken cancellationToken)
|
async Task<int> DbContextBatchRemoveAsync(EntityState[] dels, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
if (dels.Any() == false) return 0;
|
if (dels.Any() == false) return 0;
|
||||||
var affrows = await this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrowsAsync(cancellationToken);
|
var affrows = 0;
|
||||||
|
if (_table.Primarys.Length == 1)
|
||||||
|
affrows = await this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrowsAsync(cancellationToken);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var takeMax = 300;
|
||||||
|
var execCount = (int)Math.Ceiling(1.0 * dels.Length / takeMax);
|
||||||
|
for (var a = 0; a < execCount; a++)
|
||||||
|
affrows += await this.OrmDelete(dels.Skip(a * takeMax).Take(Math.Min(takeMax, dels.Length - a * takeMax)).Select(d => d.Value)).ExecuteAffrowsAsync(cancellationToken);
|
||||||
|
}
|
||||||
_db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a.Value, Type = DbContext.EntityChangeType.Delete }));
|
_db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a.Value, Type = DbContext.EntityChangeType.Delete }));
|
||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
@@ -433,7 +502,7 @@ namespace FreeSql
|
|||||||
async public Task AddOrUpdateAsync(TEntity data, CancellationToken cancellationToken = default)
|
async public Task AddOrUpdateAsync(TEntity data, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
if (data == null) throw new ArgumentNullException(nameof(data));
|
if (data == null) throw new ArgumentNullException(nameof(data));
|
||||||
if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
|
|
||||||
var flagExists = ExistsInStates(data);
|
var flagExists = ExistsInStates(data);
|
||||||
if (flagExists == false)
|
if (flagExists == false)
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ namespace FreeSql
|
|||||||
case DataType.ShenTong:
|
case DataType.ShenTong:
|
||||||
case DataType.DuckDB:
|
case DataType.DuckDB:
|
||||||
case DataType.Firebird: //firebird 只支持单条插入 returning
|
case DataType.Firebird: //firebird 只支持单条插入 returning
|
||||||
|
case DataType.Xugu:
|
||||||
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
|
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
|
||||||
{
|
{
|
||||||
DbContextFlushCommand();
|
DbContextFlushCommand();
|
||||||
@@ -122,7 +123,7 @@ namespace FreeSql
|
|||||||
case DataType.DuckDB:
|
case DataType.DuckDB:
|
||||||
DbContextFlushCommand();
|
DbContextFlushCommand();
|
||||||
var rets = this.OrmInsert(data).ExecuteInserted();
|
var rets = this.OrmInsert(data).ExecuteInserted();
|
||||||
if (rets.Count != data.Count()) throw new Exception(DbContextStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType));
|
if (rets.Count != data.Count()) throw new Exception(DbContextErrorStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType));
|
||||||
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a, Type = DbContext.EntityChangeType.Insert }));
|
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a, Type = DbContext.EntityChangeType.Insert }));
|
||||||
var idx = 0;
|
var idx = 0;
|
||||||
foreach (var s in data)
|
foreach (var s in data)
|
||||||
@@ -347,7 +348,7 @@ namespace FreeSql
|
|||||||
|
|
||||||
if (_states.TryGetValue(uplst1.Key, out var lstval1) == false) return -999;
|
if (_states.TryGetValue(uplst1.Key, out var lstval1) == false) return -999;
|
||||||
var lstval2 = default(EntityState);
|
var lstval2 = default(EntityState);
|
||||||
if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception(DbContextStrings.SpecialError_UpdateFailedDataNotTracked(_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value)));
|
if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception(DbContextErrorStrings.SpecialError_UpdateFailedDataNotTracked(_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value)));
|
||||||
|
|
||||||
var cuig1 = _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst1.Value, lstval1.Value, true);
|
var cuig1 = _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst1.Value, lstval1.Value, true);
|
||||||
var cuig2 = uplst2 != null ? _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst2.Value, lstval2.Value, true) : null;
|
var cuig2 = uplst2 != null ? _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst2.Value, lstval2.Value, true) : null;
|
||||||
@@ -405,11 +406,11 @@ namespace FreeSql
|
|||||||
public void Update(TEntity data)
|
public void Update(TEntity data)
|
||||||
{
|
{
|
||||||
var exists = ExistsInStates(data);
|
var exists = ExistsInStates(data);
|
||||||
if (exists == null) throw new Exception(DbContextStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (exists == null) throw new Exception(DbContextErrorStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
if (exists == false)
|
if (exists == false)
|
||||||
{
|
{
|
||||||
var olddata = OrmSelect(data).First();
|
var olddata = OrmSelect(data).First();
|
||||||
if (olddata == null) throw new Exception(DbContextStrings.CannotUpdate_RecordDoesNotExist(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (olddata == null) throw new Exception(DbContextErrorStrings.CannotUpdate_RecordDoesNotExist(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateRangePriv(new[] { data }, true);
|
UpdateRangePriv(new[] { data }, true);
|
||||||
@@ -450,7 +451,16 @@ namespace FreeSql
|
|||||||
int DbContextBatchRemove(EntityState[] dels)
|
int DbContextBatchRemove(EntityState[] dels)
|
||||||
{
|
{
|
||||||
if (dels.Any() == false) return 0;
|
if (dels.Any() == false) return 0;
|
||||||
var affrows = this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrows();
|
var affrows = 0;
|
||||||
|
if (_table.Primarys.Length == 1)
|
||||||
|
affrows = this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrows();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var takeMax = 300;
|
||||||
|
var execCount = (int)Math.Ceiling(1.0 * dels.Length / takeMax);
|
||||||
|
for (var a = 0; a < execCount; a++)
|
||||||
|
affrows += this.OrmDelete(dels.Skip(a * takeMax).Take(Math.Min(takeMax, dels.Length - a * takeMax)).Select(d => d.Value)).ExecuteAffrows();
|
||||||
|
}
|
||||||
_db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a.Value, Type = DbContext.EntityChangeType.Delete }));
|
_db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a.Value, Type = DbContext.EntityChangeType.Delete }));
|
||||||
return affrows; //https://github.com/dotnetcore/FreeSql/issues/373
|
return affrows; //https://github.com/dotnetcore/FreeSql/issues/373
|
||||||
}
|
}
|
||||||
@@ -497,7 +507,7 @@ namespace FreeSql
|
|||||||
public void AddOrUpdate(TEntity data)
|
public void AddOrUpdate(TEntity data)
|
||||||
{
|
{
|
||||||
if (data == null) throw new ArgumentNullException(nameof(data));
|
if (data == null) throw new ArgumentNullException(nameof(data));
|
||||||
if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data)));
|
||||||
|
|
||||||
var flagExists = ExistsInStates(data);
|
var flagExists = ExistsInStates(data);
|
||||||
if (flagExists == false)
|
if (flagExists == false)
|
||||||
@@ -537,7 +547,7 @@ namespace FreeSql
|
|||||||
public void BeginEdit(List<TEntity> data)
|
public void BeginEdit(List<TEntity> data)
|
||||||
{
|
{
|
||||||
if (data == null) return;
|
if (data == null) return;
|
||||||
if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotEdit_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data.First())));
|
if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotEdit_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data.First())));
|
||||||
_statesEditing.Clear();
|
_statesEditing.Clear();
|
||||||
_dataEditing = data;
|
_dataEditing = data;
|
||||||
foreach (var item in data)
|
foreach (var item in data)
|
||||||
@@ -836,7 +846,7 @@ namespace FreeSql
|
|||||||
|
|
||||||
var rawset = _db.Set(dbset.EntityType);
|
var rawset = _db.Set(dbset.EntityType);
|
||||||
var statesRemove = typeof(DbSet<>).MakeGenericType(dbset.EntityType).GetMethod("StatesRemoveByObjects", BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(IEnumerable<object>) }, null);
|
var statesRemove = typeof(DbSet<>).MakeGenericType(dbset.EntityType).GetMethod("StatesRemoveByObjects", BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(IEnumerable<object>) }, null);
|
||||||
if (statesRemove == null) throw new Exception(DbContextStrings.NotFoundMethod_StatesRemoveByObjects);
|
if (statesRemove == null) throw new Exception(DbContextErrorStrings.NotFoundMethod_StatesRemoveByObjects);
|
||||||
statesRemove.Invoke(rawset, new object[] { items });
|
statesRemove.Invoke(rawset, new object[] { items });
|
||||||
}
|
}
|
||||||
returnDeleted?.AddRange(items);
|
returnDeleted?.AddRange(items);
|
||||||
@@ -857,8 +867,8 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
if (item == null) return;
|
if (item == null) return;
|
||||||
if (string.IsNullOrEmpty(propertyName)) return;
|
if (string.IsNullOrEmpty(propertyName)) return;
|
||||||
if (_table.Properties.TryGetValue(propertyName, out var prop) == false) throw new KeyNotFoundException(DbContextStrings.NotFound_Property(_table.Type.FullName, propertyName));
|
if (_table.Properties.TryGetValue(propertyName, out var prop) == false) throw new KeyNotFoundException(DbContextErrorStrings.NotFound_Property(_table.Type.FullName, propertyName));
|
||||||
if (_table.ColumnsByCsIgnore.ContainsKey(propertyName)) throw new ArgumentException(DbContextStrings.TypeHasSetProperty_IgnoreAttribute(_table.Type.FullName, propertyName));
|
if (_table.ColumnsByCsIgnore.ContainsKey(propertyName)) throw new ArgumentException(DbContextErrorStrings.TypeHasSetProperty_IgnoreAttribute(_table.Type.FullName, propertyName));
|
||||||
|
|
||||||
var tref = _table.GetTableRef(propertyName, true, false);
|
var tref = _table.GetTableRef(propertyName, true, false);
|
||||||
if (tref == null) return;
|
if (tref == null) return;
|
||||||
@@ -867,7 +877,7 @@ namespace FreeSql
|
|||||||
case TableRefType.OneToOne:
|
case TableRefType.OneToOne:
|
||||||
case TableRefType.ManyToOne:
|
case TableRefType.ManyToOne:
|
||||||
case TableRefType.PgArrayToMany:
|
case TableRefType.PgArrayToMany:
|
||||||
throw new ArgumentException(DbContextStrings.PropertyOfType_IsNot_OneToManyOrManyToMany(_table.Type.FullName, propertyName));
|
throw new ArgumentException(DbContextErrorStrings.PropertyOfType_IsNot_OneToManyOrManyToMany(_table.Type.FullName, propertyName));
|
||||||
}
|
}
|
||||||
|
|
||||||
DbContextFlushCommand();
|
DbContextFlushCommand();
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
#region HasKey
|
#region HasKey
|
||||||
public EfCoreTableFluent HasKey(string key)
|
public EfCoreTableFluent HasKey(string key)
|
||||||
{
|
{
|
||||||
if (key == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("key"));
|
if (key == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("key"));
|
||||||
foreach (string name in key.Split(','))
|
foreach (string name in key.Split(','))
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(name.Trim())) continue;
|
if (string.IsNullOrEmpty(name.Trim())) continue;
|
||||||
@@ -55,7 +55,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
#region HasIndex
|
#region HasIndex
|
||||||
public HasIndexFluent HasIndex(string index)
|
public HasIndexFluent HasIndex(string index)
|
||||||
{
|
{
|
||||||
if (index == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("index"));
|
if (index == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("index"));
|
||||||
var indexName = $"idx_{Guid.NewGuid().ToString("N").Substring(0, 8)}";
|
var indexName = $"idx_{Guid.NewGuid().ToString("N").Substring(0, 8)}";
|
||||||
var columns = new List<string>();
|
var columns = new List<string>();
|
||||||
foreach (string name in index.Split(','))
|
foreach (string name in index.Split(','))
|
||||||
@@ -98,8 +98,8 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
#region HasOne
|
#region HasOne
|
||||||
public HasOneFluent HasOne(string one)
|
public HasOneFluent HasOne(string one)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one"));
|
||||||
if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one));
|
if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(one));
|
||||||
return new HasOneFluent(_fsql, _tf, _entityType, oneProperty.PropertyType, one);
|
return new HasOneFluent(_fsql, _tf, _entityType, oneProperty.PropertyType, one);
|
||||||
}
|
}
|
||||||
public class HasOneFluent
|
public class HasOneFluent
|
||||||
@@ -124,8 +124,8 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
}
|
}
|
||||||
public HasOneFluent WithMany(string many)
|
public HasOneFluent WithMany(string many)
|
||||||
{
|
{
|
||||||
if (many == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
if (many == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many"));
|
||||||
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(many));
|
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(many));
|
||||||
_withManyProperty = manyProperty.Name;
|
_withManyProperty = manyProperty.Name;
|
||||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||||
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(many, _selfBind));
|
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(many, _selfBind));
|
||||||
@@ -133,18 +133,18 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
}
|
}
|
||||||
public HasOneFluent WithOne(string one, string foreignKey)
|
public HasOneFluent WithOne(string one, string foreignKey)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one"));
|
||||||
if (_entityType1.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one));
|
if (_entityType1.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(one));
|
||||||
if (oneProperty != _entityType1) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one));
|
if (oneProperty != _entityType1) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(one));
|
||||||
_withOneProperty = oneProperty.Name;
|
_withOneProperty = oneProperty.Name;
|
||||||
|
|
||||||
if (foreignKey == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
if (foreignKey == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||||
foreach (string name in foreignKey.Split(','))
|
foreach (string name in foreignKey.Split(','))
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(name.Trim())) continue;
|
if (string.IsNullOrEmpty(name.Trim())) continue;
|
||||||
_withOneBind += ", " + name.Trim();
|
_withOneBind += ", " + name.Trim();
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey"));
|
||||||
_withOneBind = _withOneBind.TrimStart(',', ' ');
|
_withOneBind = _withOneBind.TrimStart(',', ' ');
|
||||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||||
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(_withOneProperty, _withOneBind));
|
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(_withOneProperty, _withOneBind));
|
||||||
@@ -152,13 +152,13 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
}
|
}
|
||||||
public HasOneFluent HasForeignKey(string foreignKey)
|
public HasOneFluent HasForeignKey(string foreignKey)
|
||||||
{
|
{
|
||||||
if (foreignKey == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
if (foreignKey == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||||
foreach (string name in foreignKey.Split(','))
|
foreach (string name in foreignKey.Split(','))
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(name.Trim())) continue;
|
if (string.IsNullOrEmpty(name.Trim())) continue;
|
||||||
_selfBind += ", " + name.Trim();
|
_selfBind += ", " + name.Trim();
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey"));
|
||||||
_selfBind = _selfBind.TrimStart(',', ' ');
|
_selfBind = _selfBind.TrimStart(',', ' ');
|
||||||
_tf.Navigate(_selfProperty, _selfBind);
|
_tf.Navigate(_selfProperty, _selfBind);
|
||||||
if (string.IsNullOrEmpty(_withManyProperty) == false)
|
if (string.IsNullOrEmpty(_withManyProperty) == false)
|
||||||
@@ -173,9 +173,9 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
#region HasMany
|
#region HasMany
|
||||||
public HasManyFluent HasMany(string many)
|
public HasManyFluent HasMany(string many)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(many)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
if (string.IsNullOrEmpty(many)) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many"));
|
||||||
if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_CollectionProperties(many));
|
if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_CollectionProperties(many));
|
||||||
if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException(DbContextStrings.ParameterError_IsNot_CollectionProperties(many));
|
if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_IsNot_CollectionProperties(many));
|
||||||
return new HasManyFluent(_fsql, _tf, _entityType, manyProperty.PropertyType.GetGenericArguments()[0], manyProperty.Name);
|
return new HasManyFluent(_fsql, _tf, _entityType, manyProperty.PropertyType.GetGenericArguments()[0], manyProperty.Name);
|
||||||
}
|
}
|
||||||
public class HasManyFluent
|
public class HasManyFluent
|
||||||
@@ -200,18 +200,18 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
|
|
||||||
public void WithMany(string many, Type middleType)
|
public void WithMany(string many, Type middleType)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(many)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
if (string.IsNullOrEmpty(many)) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many"));
|
||||||
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_CollectionProperties(many));
|
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_CollectionProperties(many));
|
||||||
if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException(DbContextStrings.ParameterError_IsNot_CollectionProperties(many));
|
if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_IsNot_CollectionProperties(many));
|
||||||
_withManyProperty = manyProperty.Name;
|
_withManyProperty = manyProperty.Name;
|
||||||
_tf.Navigate(_selfProperty, null, middleType);
|
_tf.Navigate(_selfProperty, null, middleType);
|
||||||
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(_withManyProperty, null, middleType));
|
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(_withManyProperty, null, middleType));
|
||||||
}
|
}
|
||||||
public HasManyFluent WithOne(string one)
|
public HasManyFluent WithOne(string one)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one"));
|
||||||
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one));
|
if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(one));
|
||||||
if (oneProperty.PropertyType != _entityType1) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one));
|
if (oneProperty.PropertyType != _entityType1) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(one));
|
||||||
_withOneProperty = oneProperty.Name;
|
_withOneProperty = oneProperty.Name;
|
||||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||||
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(oneProperty.Name, _selfBind));
|
_fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(oneProperty.Name, _selfBind));
|
||||||
@@ -219,13 +219,13 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
}
|
}
|
||||||
public HasManyFluent HasForeignKey(string foreignKey)
|
public HasManyFluent HasForeignKey(string foreignKey)
|
||||||
{
|
{
|
||||||
if (foreignKey == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
if (foreignKey == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||||
foreach (string name in foreignKey.Split(','))
|
foreach (string name in foreignKey.Split(','))
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(name.Trim())) continue;
|
if (string.IsNullOrEmpty(name.Trim())) continue;
|
||||||
_selfBind += ", " + name.Trim();
|
_selfBind += ", " + name.Trim();
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey"));
|
||||||
_selfBind = _selfBind.TrimStart(',', ' ');
|
_selfBind = _selfBind.TrimStart(',', ' ');
|
||||||
_tf.Navigate(_selfProperty, _selfBind);
|
_tf.Navigate(_selfProperty, _selfBind);
|
||||||
if (string.IsNullOrEmpty(_withOneProperty) == false)
|
if (string.IsNullOrEmpty(_withOneProperty) == false)
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
{
|
{
|
||||||
var exp = key?.Body;
|
var exp = key?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("key"));
|
if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("key"));
|
||||||
|
|
||||||
switch (exp.NodeType)
|
switch (exp.NodeType)
|
||||||
{
|
{
|
||||||
@@ -63,7 +63,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
{
|
{
|
||||||
var exp = index?.Body;
|
var exp = index?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("index"));
|
if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("index"));
|
||||||
|
|
||||||
var indexName = $"idx_{Guid.NewGuid().ToString("N").Substring(0, 8)}";
|
var indexName = $"idx_{Guid.NewGuid().ToString("N").Substring(0, 8)}";
|
||||||
var columns = new List<string>();
|
var columns = new List<string>();
|
||||||
@@ -114,7 +114,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
{
|
{
|
||||||
var exp = one?.Body;
|
var exp = one?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one"));
|
||||||
|
|
||||||
var oneProperty = "";
|
var oneProperty = "";
|
||||||
switch (exp.NodeType)
|
switch (exp.NodeType)
|
||||||
@@ -123,7 +123,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
oneProperty = (exp as MemberExpression).Member.Name;
|
oneProperty = (exp as MemberExpression).Member.Name;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(oneProperty)) throw new ArgumentException(DbContextStrings.ParameterError("one"));
|
if (string.IsNullOrEmpty(oneProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("one"));
|
||||||
return new HasOneFluent<T2>(_fsql, _tf, oneProperty);
|
return new HasOneFluent<T2>(_fsql, _tf, oneProperty);
|
||||||
}
|
}
|
||||||
public class HasOneFluent<T2>
|
public class HasOneFluent<T2>
|
||||||
@@ -146,7 +146,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
{
|
{
|
||||||
var exp = many?.Body;
|
var exp = many?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many"));
|
||||||
|
|
||||||
switch (exp.NodeType)
|
switch (exp.NodeType)
|
||||||
{
|
{
|
||||||
@@ -154,7 +154,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
_withManyProperty = (exp as MemberExpression).Member.Name;
|
_withManyProperty = (exp as MemberExpression).Member.Name;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException(DbContextStrings.ParameterError("many"));
|
if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("many"));
|
||||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withManyProperty, _selfBind));
|
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withManyProperty, _selfBind));
|
||||||
return this;
|
return this;
|
||||||
@@ -163,7 +163,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
{
|
{
|
||||||
var exp = one?.Body;
|
var exp = one?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one"));
|
||||||
|
|
||||||
switch (exp.NodeType)
|
switch (exp.NodeType)
|
||||||
{
|
{
|
||||||
@@ -171,11 +171,11 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
_withOneProperty = (exp as MemberExpression).Member.Name;
|
_withOneProperty = (exp as MemberExpression).Member.Name;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException(DbContextStrings.ParameterError("one"));
|
if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("one"));
|
||||||
|
|
||||||
exp = foreignKey?.Body;
|
exp = foreignKey?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||||
|
|
||||||
switch (exp.NodeType)
|
switch (exp.NodeType)
|
||||||
{
|
{
|
||||||
@@ -190,7 +190,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
_withOneBind = _withOneBind.TrimStart(',', ' ');
|
_withOneBind = _withOneBind.TrimStart(',', ' ');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey"));
|
||||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withOneProperty, _withOneBind));
|
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withOneProperty, _withOneBind));
|
||||||
return this;
|
return this;
|
||||||
@@ -199,7 +199,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
{
|
{
|
||||||
var exp = foreignKey?.Body;
|
var exp = foreignKey?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||||
|
|
||||||
switch (exp.NodeType)
|
switch (exp.NodeType)
|
||||||
{
|
{
|
||||||
@@ -214,7 +214,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
_selfBind = _selfBind.TrimStart(',', ' ');
|
_selfBind = _selfBind.TrimStart(',', ' ');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey"));
|
||||||
_tf.Navigate(_selfProperty, _selfBind);
|
_tf.Navigate(_selfProperty, _selfBind);
|
||||||
if (string.IsNullOrEmpty(_withManyProperty) == false)
|
if (string.IsNullOrEmpty(_withManyProperty) == false)
|
||||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withManyProperty, _selfBind));
|
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withManyProperty, _selfBind));
|
||||||
@@ -230,7 +230,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
{
|
{
|
||||||
var exp = many?.Body;
|
var exp = many?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many"));
|
||||||
|
|
||||||
var manyProperty = "";
|
var manyProperty = "";
|
||||||
switch (exp.NodeType)
|
switch (exp.NodeType)
|
||||||
@@ -239,7 +239,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
manyProperty = (exp as MemberExpression).Member.Name;
|
manyProperty = (exp as MemberExpression).Member.Name;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(manyProperty)) throw new ArgumentException(DbContextStrings.ParameterError("many"));
|
if (string.IsNullOrEmpty(manyProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("many"));
|
||||||
return new HasManyFluent<T2>(_fsql, _tf, manyProperty);
|
return new HasManyFluent<T2>(_fsql, _tf, manyProperty);
|
||||||
}
|
}
|
||||||
public class HasManyFluent<T2>
|
public class HasManyFluent<T2>
|
||||||
@@ -262,7 +262,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
{
|
{
|
||||||
var exp = many?.Body;
|
var exp = many?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many"));
|
if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many"));
|
||||||
|
|
||||||
switch (exp.NodeType)
|
switch (exp.NodeType)
|
||||||
{
|
{
|
||||||
@@ -270,7 +270,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
_withManyProperty = (exp as MemberExpression).Member.Name;
|
_withManyProperty = (exp as MemberExpression).Member.Name;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException(DbContextStrings.ParameterError("many"));
|
if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("many"));
|
||||||
|
|
||||||
_tf.Navigate(_selfProperty, null, middleType);
|
_tf.Navigate(_selfProperty, null, middleType);
|
||||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withManyProperty, null, middleType));
|
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withManyProperty, null, middleType));
|
||||||
@@ -279,7 +279,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
{
|
{
|
||||||
var exp = one?.Body;
|
var exp = one?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one"));
|
if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one"));
|
||||||
|
|
||||||
switch (exp.NodeType)
|
switch (exp.NodeType)
|
||||||
{
|
{
|
||||||
@@ -287,7 +287,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
_withOneProperty = (exp as MemberExpression).Member.Name;
|
_withOneProperty = (exp as MemberExpression).Member.Name;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException(DbContextStrings.ParameterError("one"));
|
if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("one"));
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(_selfBind) == false)
|
if (string.IsNullOrEmpty(_selfBind) == false)
|
||||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withOneProperty, _selfBind));
|
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withOneProperty, _selfBind));
|
||||||
@@ -297,7 +297,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
{
|
{
|
||||||
var exp = foreignKey?.Body;
|
var exp = foreignKey?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey"));
|
if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey"));
|
||||||
|
|
||||||
switch (exp.NodeType)
|
switch (exp.NodeType)
|
||||||
{
|
{
|
||||||
@@ -312,7 +312,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi
|
|||||||
_selfBind = _selfBind.TrimStart(',', ' ');
|
_selfBind = _selfBind.TrimStart(',', ' ');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey"));
|
if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey"));
|
||||||
_tf.Navigate(_selfProperty, _selfBind);
|
_tf.Navigate(_selfProperty, _selfBind);
|
||||||
if (string.IsNullOrEmpty(_withOneProperty) == false)
|
if (string.IsNullOrEmpty(_withOneProperty) == false)
|
||||||
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withOneProperty, _selfBind));
|
_fsql.CodeFirst.ConfigEntity<T2>(eb2 => eb2.Navigate(_withOneProperty, _selfBind));
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||||||
}
|
}
|
||||||
catch(Exception ex)
|
catch(Exception ex)
|
||||||
{
|
{
|
||||||
throw new Exception(DbContextStrings.AddFreeDbContextError_CheckConstruction(dbContextType.Name), ex);
|
throw new Exception(DbContextErrorStrings.AddFreeDbContextError_CheckConstruction(dbContextType.Name), ex);
|
||||||
}
|
}
|
||||||
if (ctx != null && ctx._ormScoped == null)
|
if (ctx != null && ctx._ormScoped == null)
|
||||||
{
|
{
|
||||||
@@ -31,7 +31,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||||||
ctx._optionsPriv = builder._options;
|
ctx._optionsPriv = builder._options;
|
||||||
|
|
||||||
if (ctx._ormScoped == null)
|
if (ctx._ormScoped == null)
|
||||||
throw new Exception(DbContextStrings.ConfigureUseFreeSql);
|
throw new Exception(DbContextErrorStrings.ConfigureUseFreeSql);
|
||||||
|
|
||||||
ctx.InitPropSets();
|
ctx.InitPropSets();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net8.0;net7.0;net6.0;net5.0;netstandard2.1;netcoreapp3.1;netstandard2.0;net45;net40</TargetFrameworks>
|
<TargetFrameworks>net9.0;net8.0;net7.0;net6.0;net5.0;netcoreapp3.1;netstandard2.1;netstandard2.0;net45;net40</TargetFrameworks>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Authors>FreeSql;ncc;YeXiangQin</Authors>
|
<Authors>FreeSql;ncc;YeXiangQin</Authors>
|
||||||
<Description>FreeSql is the ORM in .NetCore, .NetFramework, And Xamarin. It supports Mysql, Postgresql, SqlServer, Oracle, Sqlite, Firebird, Clickhouse, DuckDB, TDengine, QuestDB, Odbc, Oledb, 达梦, 人大金仓, 南大通用, 虚谷, 神舟通用, 翰高, And Access</Description>
|
<Description>FreeSql is the ORM in .NetCore, .NetFramework, And Xamarin. It supports Mysql, Postgresql, SqlServer, Oracle, Sqlite, Firebird, Clickhouse, DuckDB, TDengine, QuestDB, Odbc, Oledb, 达梦, 人大金仓, 南大通用, 虚谷, 神舟通用, 翰高, And Access</Description>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>false</DelaySign>
|
<DelaySign>false</DelaySign>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
@@ -35,10 +35,13 @@
|
|||||||
<PropertyGroup Condition="'$(TargetFramework)' == 'net40'">
|
<PropertyGroup Condition="'$(TargetFramework)' == 'net40'">
|
||||||
<DefineConstants>net40</DefineConstants>
|
<DefineConstants>net40</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(TargetFramework)' == 'net8.0' or '$(TargetFramework)' == 'net7.0' or '$(TargetFramework)' == 'net6.0' or '$(TargetFramework)' == 'net5.0' or '$(TargetFramework)' == 'netcoreapp3.1'">
|
<PropertyGroup Condition="'$(TargetFramework)' == 'net9.0' or '$(TargetFramework)' == 'net8.0' or '$(TargetFramework)' == 'net7.0' or '$(TargetFramework)' == 'net6.0' or '$(TargetFramework)' == 'net5.0' or '$(TargetFramework)' == 'netcoreapp3.1'">
|
||||||
<DefineConstants>netcoreapp</DefineConstants>
|
<DefineConstants>netcoreapp</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
|
||||||
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
|
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@@ -58,31 +61,4 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\FreeSql\FreeSql.csproj" />
|
<ProjectReference Include="..\FreeSql\FreeSql.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Update="Properties\DbContextStrings.Designer.cs">
|
|
||||||
<DesignTime>True</DesignTime>
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DependentUpon>DbContextStrings.Designer.tt</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<None Update="Properties\DbContextStrings.Designer.tt">
|
|
||||||
<Generator>TextTemplatingFileGenerator</Generator>
|
|
||||||
<LastGenOutput>DbContextStrings.Designer.cs</LastGenOutput>
|
|
||||||
</None>
|
|
||||||
<EmbeddedResource Update="Properties\DbContextStrings.resx">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<CustomToolNamespace>FreeSql</CustomToolNamespace>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<EmbeddedResource Update="Properties\DbContextStrings.zh-Hans.resx">
|
|
||||||
<CustomToolNamespace>FreeSql</CustomToolNamespace>
|
|
||||||
</EmbeddedResource>
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -83,6 +83,216 @@
|
|||||||
刷新队列中的命令
|
刷新队列中的命令
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.AddFreeDbContextError_CheckConstruction(System.Object)">
|
||||||
|
<summary>
|
||||||
|
AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotAdd_AlreadyExistsInStateManagement(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可添加,已存在于状态管理:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotAdd_EntityHasNo_PrimaryKey(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可添加,实体没有主键:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotAdd_PrimaryKey_NotSet(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可添加,未设置主键的值:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotAdd_SelfIncreasingHasValue(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可添加,自增属性有值:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotAttach_EntityHasNo_PrimaryKey(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可附加,实体没有主键:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotAttach_PrimaryKey_NotSet(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可附加,未设置主键的值:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotDelete_DataNotTracked_ShouldQuery(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可删除,数据未被跟踪,应该先查询:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotDelete_EntityHasNo_PrimaryKey(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可删除,实体没有主键:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotDelete_PrimaryKey_NotSet(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可删除,未设置主键的值:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotEdit_EntityHasNo_PrimaryKey(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可进行编辑,实体没有主键:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotUpdate_DataShouldQueryOrAttach(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotUpdate_EntityHasNo_PrimaryKey(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可更新,实体没有主键:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotUpdate_PrimaryKey_NotSet(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可更新,未设置主键的值:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.CannotUpdate_RecordDoesNotExist(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可更新,数据库不存在该记录:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:FreeSql.DbContextErrorStrings.ConfigureUseFreeSql">
|
||||||
|
<summary>
|
||||||
|
请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:FreeSql.DbContextErrorStrings.DbSetAsType_NotSupport_Object">
|
||||||
|
<summary>
|
||||||
|
DbSet.AsType 参数错误,请传入正确的实体类型
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.EntityType_CannotConvert(System.Object,System.Object)">
|
||||||
|
<summary>
|
||||||
|
实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.EntityType_PrimaryKeyError(System.Object,System.Object)">
|
||||||
|
<summary>
|
||||||
|
实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.EntityType_PrimaryKeyIsNotOne(System.Object)">
|
||||||
|
<summary>
|
||||||
|
实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:FreeSql.DbContextErrorStrings.FailedSetFilter_NotBelongIRpository">
|
||||||
|
<summary>
|
||||||
|
FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.Incomparable_EntityHasNo_PrimaryKey(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可比较,实体没有主键:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.Incomparable_PrimaryKey_NotSet(System.Object)">
|
||||||
|
<summary>
|
||||||
|
不可比较,未设置主键的值:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.InsertError_Filter(System.Object,System.Object,System.Object)">
|
||||||
|
<summary>
|
||||||
|
FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:FreeSql.DbContextErrorStrings.ISelectAsType_ParameterError">
|
||||||
|
<summary>
|
||||||
|
ISelect.AsType 参数不支持指定为 object
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.NotFound_Property(System.Object,System.Object)">
|
||||||
|
<summary>
|
||||||
|
{tableTypeFullName} 不存在属性 {propertyName}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:FreeSql.DbContextErrorStrings.NotFoundMethod_StatesRemoveByObjects">
|
||||||
|
<summary>
|
||||||
|
找不到方法 DbSet&lt;&gt;.StatesRemoveByObjects
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.ParameterDataTypeError(System.Object)">
|
||||||
|
<summary>
|
||||||
|
参数 data 类型错误 {entityTypeFullName}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.ParameterError(System.Object)">
|
||||||
|
<summary>
|
||||||
|
参数错误 {param}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.ParameterError_CannotBeNull(System.Object)">
|
||||||
|
<summary>
|
||||||
|
参数错误 {param} 不能为 null
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.ParameterError_IsNot_CollectionProperties(System.Object)">
|
||||||
|
<summary>
|
||||||
|
参数错误 {many} 不是集合属性
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.ParameterError_NotFound_CollectionProperties(System.Object)">
|
||||||
|
<summary>
|
||||||
|
参数错误 {many} 集合属性不存在
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.ParameterError_NotFound_Property(System.Object)">
|
||||||
|
<summary>
|
||||||
|
参数错误 {one} 属性不存在
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:FreeSql.DbContextErrorStrings.Propagation_Mandatory">
|
||||||
|
<summary>
|
||||||
|
Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:FreeSql.DbContextErrorStrings.Propagation_Never">
|
||||||
|
<summary>
|
||||||
|
Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.PropertyOfType_IsNot_OneToManyOrManyToMany(System.Object,System.Object)">
|
||||||
|
<summary>
|
||||||
|
{tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.SpecialError_BatchAdditionFailed(System.Object)">
|
||||||
|
<summary>
|
||||||
|
特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.SpecialError_UpdateFailedDataNotTracked(System.Object)">
|
||||||
|
<summary>
|
||||||
|
特别错误:更新失败,数据未被跟踪:{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:FreeSql.DbContextErrorStrings.TransactionHasBeenStarted">
|
||||||
|
<summary>
|
||||||
|
已开启事务,不能禁用工作单元
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.TypeHasSetProperty_IgnoreAttribute(System.Object,System.Object)">
|
||||||
|
<summary>
|
||||||
|
{tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.UnitOfWorkManager_Construction_CannotBeNull(System.Object,System.Object)">
|
||||||
|
<summary>
|
||||||
|
{unitOfWorkManager} 构造参数 {fsql} 不能为 null
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.DbContextErrorStrings.UpdateError_Filter(System.Object,System.Object,System.Object)">
|
||||||
|
<summary>
|
||||||
|
FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString}
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="P:FreeSql.DbContextOptions.EnableCascadeSave">
|
<member name="P:FreeSql.DbContextOptions.EnableCascadeSave">
|
||||||
<summary>
|
<summary>
|
||||||
是否开启 一对一(OneToOne)、一对多(OneToMany)、多对多(ManyToMany) 级联保存功能<para></para>
|
是否开启 一对一(OneToOne)、一对多(OneToMany)、多对多(ManyToMany) 级联保存功能<para></para>
|
||||||
@@ -264,233 +474,6 @@
|
|||||||
<param name="data"></param>
|
<param name="data"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="T:FreeSql.DbContextStrings">
|
|
||||||
<summary>
|
|
||||||
<para>
|
|
||||||
String resources used in FreeSql exceptions, etc.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
These strings are exposed publicly for use by database providers and extensions.
|
|
||||||
It is unusual for application code to need these strings.
|
|
||||||
</para>
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:FreeSql.DbContextStrings.Culture">
|
|
||||||
<summary>
|
|
||||||
重写当前线程的 CurrentUICulture 属性,对
|
|
||||||
使用此强类型资源类的所有资源查找执行重写。
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.AddFreeDbContextError_CheckConstruction(System.Object)">
|
|
||||||
<summary>
|
|
||||||
AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotAdd_AlreadyExistsInStateManagement(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可添加,已存在于状态管理:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可添加,实体没有主键:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotAdd_PrimaryKey_NotSet(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可添加,未设置主键的值:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotAdd_SelfIncreasingHasValue(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可添加,自增属性有值:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotAttach_EntityHasNo_PrimaryKey(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可附加,实体没有主键:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotAttach_PrimaryKey_NotSet(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可附加,未设置主键的值:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotDelete_DataNotTracked_ShouldQuery(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可删除,数据未被跟踪,应该先查询:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotDelete_EntityHasNo_PrimaryKey(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可删除,实体没有主键:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotDelete_PrimaryKey_NotSet(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可删除,未设置主键的值:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotEdit_EntityHasNo_PrimaryKey(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可进行编辑,实体没有主键:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotUpdate_DataShouldQueryOrAttach(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotUpdate_EntityHasNo_PrimaryKey(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可更新,实体没有主键:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotUpdate_PrimaryKey_NotSet(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可更新,未设置主键的值:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.CannotUpdate_RecordDoesNotExist(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可更新,数据库不存在该记录:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:FreeSql.DbContextStrings.ConfigureUseFreeSql">
|
|
||||||
<summary>
|
|
||||||
请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:FreeSql.DbContextStrings.DbSetAsType_NotSupport_Object">
|
|
||||||
<summary>
|
|
||||||
DbSet.AsType 参数错误,请传入正确的实体类型
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.EntityType_CannotConvert(System.Object,System.Object)">
|
|
||||||
<summary>
|
|
||||||
实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.EntityType_PrimaryKeyError(System.Object,System.Object)">
|
|
||||||
<summary>
|
|
||||||
实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.EntityType_PrimaryKeyIsNotOne(System.Object)">
|
|
||||||
<summary>
|
|
||||||
实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:FreeSql.DbContextStrings.FailedSetFilter_NotBelongIRpository">
|
|
||||||
<summary>
|
|
||||||
FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.Incomparable_EntityHasNo_PrimaryKey(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可比较,实体没有主键:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.Incomparable_PrimaryKey_NotSet(System.Object)">
|
|
||||||
<summary>
|
|
||||||
不可比较,未设置主键的值:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.InsertError_Filter(System.Object,System.Object,System.Object)">
|
|
||||||
<summary>
|
|
||||||
FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:FreeSql.DbContextStrings.ISelectAsType_ParameterError">
|
|
||||||
<summary>
|
|
||||||
ISelect.AsType 参数不支持指定为 object
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.NotFound_Property(System.Object,System.Object)">
|
|
||||||
<summary>
|
|
||||||
{tableTypeFullName} 不存在属性 {propertyName}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:FreeSql.DbContextStrings.NotFoundMethod_StatesRemoveByObjects">
|
|
||||||
<summary>
|
|
||||||
找不到方法 DbSet<>.StatesRemoveByObjects
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.ParameterDataTypeError(System.Object)">
|
|
||||||
<summary>
|
|
||||||
参数 data 类型错误 {entityTypeFullName}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.ParameterError(System.Object)">
|
|
||||||
<summary>
|
|
||||||
参数错误 {param}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.ParameterError_CannotBeNull(System.Object)">
|
|
||||||
<summary>
|
|
||||||
参数错误 {param} 不能为 null
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.ParameterError_IsNot_CollectionProperties(System.Object)">
|
|
||||||
<summary>
|
|
||||||
参数错误 {many} 不是集合属性
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.ParameterError_NotFound_CollectionProperties(System.Object)">
|
|
||||||
<summary>
|
|
||||||
参数错误 {many} 集合属性不存在
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.ParameterError_NotFound_Property(System.Object)">
|
|
||||||
<summary>
|
|
||||||
参数错误 {one} 属性不存在
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:FreeSql.DbContextStrings.Propagation_Mandatory">
|
|
||||||
<summary>
|
|
||||||
Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:FreeSql.DbContextStrings.Propagation_Never">
|
|
||||||
<summary>
|
|
||||||
Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.PropertyOfType_IsNot_OneToManyOrManyToMany(System.Object,System.Object)">
|
|
||||||
<summary>
|
|
||||||
{tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.SpecialError_BatchAdditionFailed(System.Object)">
|
|
||||||
<summary>
|
|
||||||
特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.SpecialError_UpdateFailedDataNotTracked(System.Object)">
|
|
||||||
<summary>
|
|
||||||
特别错误:更新失败,数据未被跟踪:{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:FreeSql.DbContextStrings.TransactionHasBeenStarted">
|
|
||||||
<summary>
|
|
||||||
已开启事务,不能禁用工作单元
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.TypeHasSetProperty_IgnoreAttribute(System.Object,System.Object)">
|
|
||||||
<summary>
|
|
||||||
{tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.UnitOfWorkManager_Construction_CannotBeNull(System.Object,System.Object)">
|
|
||||||
<summary>
|
|
||||||
{unitOfWorkManager} 构造参数 {fsql} 不能为 null
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.DbContextStrings.UpdateError_Filter(System.Object,System.Object,System.Object)">
|
|
||||||
<summary>
|
|
||||||
FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString}
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IRepositoryUnitOfWork.GetRepository``1">
|
<member name="M:FreeSql.IRepositoryUnitOfWork.GetRepository``1">
|
||||||
<summary>
|
<summary>
|
||||||
在工作单元内创建联合主键的仓储类,工作单元下的仓储操作具有事务特点
|
在工作单元内创建联合主键的仓储类,工作单元下的仓储操作具有事务特点
|
||||||
|
|||||||
@@ -1,375 +0,0 @@
|
|||||||
|
|
||||||
// <auto-generated />
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Resources;
|
|
||||||
using System.Globalization;
|
|
||||||
using System.Threading;
|
|
||||||
|
|
||||||
namespace FreeSql
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// String resources used in FreeSql exceptions, etc.
|
|
||||||
/// </para>
|
|
||||||
/// <para>
|
|
||||||
/// These strings are exposed publicly for use by database providers and extensions.
|
|
||||||
/// It is unusual for application code to need these strings.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
public static class DbContextStrings
|
|
||||||
{
|
|
||||||
private static readonly ResourceManager _resourceManager = new ResourceManager("FreeSql.DbContext.Properties.DbContextStrings", typeof(DbContextStrings).Assembly);
|
|
||||||
|
|
||||||
private static CultureInfo _resourceCulture;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 重写当前线程的 CurrentUICulture 属性,对
|
|
||||||
/// 使用此强类型资源类的所有资源查找执行重写。
|
|
||||||
/// </summary>
|
|
||||||
public static CultureInfo Culture
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _resourceCulture;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_resourceCulture = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入
|
|
||||||
/// </summary>
|
|
||||||
public static string AddFreeDbContextError_CheckConstruction(object dbContextTypeName)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("AddFreeDbContextError_CheckConstruction", nameof(dbContextTypeName)),
|
|
||||||
dbContextTypeName);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可添加,已存在于状态管理:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotAdd_AlreadyExistsInStateManagement(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotAdd_AlreadyExistsInStateManagement", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可添加,实体没有主键:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotAdd_EntityHasNo_PrimaryKey(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotAdd_EntityHasNo_PrimaryKey", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可添加,未设置主键的值:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotAdd_PrimaryKey_NotSet(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotAdd_PrimaryKey_NotSet", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可添加,自增属性有值:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotAdd_SelfIncreasingHasValue(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotAdd_SelfIncreasingHasValue", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可附加,实体没有主键:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotAttach_EntityHasNo_PrimaryKey(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotAttach_EntityHasNo_PrimaryKey", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可附加,未设置主键的值:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotAttach_PrimaryKey_NotSet(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotAttach_PrimaryKey_NotSet", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可删除,数据未被跟踪,应该先查询:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotDelete_DataNotTracked_ShouldQuery(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotDelete_DataNotTracked_ShouldQuery", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可删除,实体没有主键:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotDelete_EntityHasNo_PrimaryKey(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotDelete_EntityHasNo_PrimaryKey", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可删除,未设置主键的值:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotDelete_PrimaryKey_NotSet(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotDelete_PrimaryKey_NotSet", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可进行编辑,实体没有主键:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotEdit_EntityHasNo_PrimaryKey(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotEdit_EntityHasNo_PrimaryKey", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotUpdate_DataShouldQueryOrAttach(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotUpdate_DataShouldQueryOrAttach", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可更新,实体没有主键:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotUpdate_EntityHasNo_PrimaryKey(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotUpdate_EntityHasNo_PrimaryKey", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可更新,未设置主键的值:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotUpdate_PrimaryKey_NotSet(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotUpdate_PrimaryKey_NotSet", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可更新,数据库不存在该记录:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string CannotUpdate_RecordDoesNotExist(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("CannotUpdate_RecordDoesNotExist", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql
|
|
||||||
/// </summary>
|
|
||||||
public static string ConfigureUseFreeSql
|
|
||||||
=> GetString("ConfigureUseFreeSql");
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// DbSet.AsType 参数错误,请传入正确的实体类型
|
|
||||||
/// </summary>
|
|
||||||
public static string DbSetAsType_NotSupport_Object
|
|
||||||
=> GetString("DbSetAsType_NotSupport_Object");
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法
|
|
||||||
/// </summary>
|
|
||||||
public static string EntityType_CannotConvert(object EntityTypeName, object name)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("EntityType_CannotConvert", nameof(EntityTypeName), nameof(name)),
|
|
||||||
EntityTypeName, name);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法
|
|
||||||
/// </summary>
|
|
||||||
public static string EntityType_PrimaryKeyError(object EntityTypeName, object fullName)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("EntityType_PrimaryKeyError", nameof(EntityTypeName), nameof(fullName)),
|
|
||||||
EntityTypeName, fullName);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法
|
|
||||||
/// </summary>
|
|
||||||
public static string EntityType_PrimaryKeyIsNotOne(object EntityTypeName)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("EntityType_PrimaryKeyIsNotOne", nameof(EntityTypeName)),
|
|
||||||
EntityTypeName);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository
|
|
||||||
/// </summary>
|
|
||||||
public static string FailedSetFilter_NotBelongIRpository
|
|
||||||
=> GetString("FailedSetFilter_NotBelongIRpository");
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可比较,实体没有主键:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string Incomparable_EntityHasNo_PrimaryKey(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("Incomparable_EntityHasNo_PrimaryKey", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 不可比较,未设置主键的值:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string Incomparable_PrimaryKey_NotSet(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("Incomparable_PrimaryKey_NotSet", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string InsertError_Filter(object filterKey, object filterValueExpression, object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("InsertError_Filter", nameof(filterKey), nameof(filterValueExpression), nameof(entityString)),
|
|
||||||
filterKey, filterValueExpression, entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// ISelect.AsType 参数不支持指定为 object
|
|
||||||
/// </summary>
|
|
||||||
public static string ISelectAsType_ParameterError
|
|
||||||
=> GetString("ISelectAsType_ParameterError");
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// {tableTypeFullName} 不存在属性 {propertyName}
|
|
||||||
/// </summary>
|
|
||||||
public static string NotFound_Property(object tableTypeFullName, object propertyName)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("NotFound_Property", nameof(tableTypeFullName), nameof(propertyName)),
|
|
||||||
tableTypeFullName, propertyName);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 找不到方法 DbSet<>.StatesRemoveByObjects
|
|
||||||
/// </summary>
|
|
||||||
public static string NotFoundMethod_StatesRemoveByObjects
|
|
||||||
=> GetString("NotFoundMethod_StatesRemoveByObjects");
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 参数 data 类型错误 {entityTypeFullName}
|
|
||||||
/// </summary>
|
|
||||||
public static string ParameterDataTypeError(object entityTypeFullName)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("ParameterDataTypeError", nameof(entityTypeFullName)),
|
|
||||||
entityTypeFullName);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 参数错误 {param}
|
|
||||||
/// </summary>
|
|
||||||
public static string ParameterError(object param)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("ParameterError", nameof(param)),
|
|
||||||
param);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 参数错误 {param} 不能为 null
|
|
||||||
/// </summary>
|
|
||||||
public static string ParameterError_CannotBeNull(object param)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("ParameterError_CannotBeNull", nameof(param)),
|
|
||||||
param);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 参数错误 {many} 不是集合属性
|
|
||||||
/// </summary>
|
|
||||||
public static string ParameterError_IsNot_CollectionProperties(object many)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("ParameterError_IsNot_CollectionProperties", nameof(many)),
|
|
||||||
many);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 参数错误 {many} 集合属性不存在
|
|
||||||
/// </summary>
|
|
||||||
public static string ParameterError_NotFound_CollectionProperties(object many)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("ParameterError_NotFound_CollectionProperties", nameof(many)),
|
|
||||||
many);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 参数错误 {one} 属性不存在
|
|
||||||
/// </summary>
|
|
||||||
public static string ParameterError_NotFound_Property(object one)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("ParameterError_NotFound_Property", nameof(one)),
|
|
||||||
one);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常
|
|
||||||
/// </summary>
|
|
||||||
public static string Propagation_Mandatory
|
|
||||||
=> GetString("Propagation_Mandatory");
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常
|
|
||||||
/// </summary>
|
|
||||||
public static string Propagation_Never
|
|
||||||
=> GetString("Propagation_Never");
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// {tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性
|
|
||||||
/// </summary>
|
|
||||||
public static string PropertyOfType_IsNot_OneToManyOrManyToMany(object tableTypeFullName, object propertyName)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("PropertyOfType_IsNot_OneToManyOrManyToMany", nameof(tableTypeFullName), nameof(propertyName)),
|
|
||||||
tableTypeFullName, propertyName);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配
|
|
||||||
/// </summary>
|
|
||||||
public static string SpecialError_BatchAdditionFailed(object dataType)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("SpecialError_BatchAdditionFailed", nameof(dataType)),
|
|
||||||
dataType);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 特别错误:更新失败,数据未被跟踪:{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string SpecialError_UpdateFailedDataNotTracked(object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("SpecialError_UpdateFailedDataNotTracked", nameof(entityString)),
|
|
||||||
entityString);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 已开启事务,不能禁用工作单元
|
|
||||||
/// </summary>
|
|
||||||
public static string TransactionHasBeenStarted
|
|
||||||
=> GetString("TransactionHasBeenStarted");
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// {tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性
|
|
||||||
/// </summary>
|
|
||||||
public static string TypeHasSetProperty_IgnoreAttribute(object tableTypeFullName, object propertyName)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("TypeHasSetProperty_IgnoreAttribute", nameof(tableTypeFullName), nameof(propertyName)),
|
|
||||||
tableTypeFullName, propertyName);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// {unitOfWorkManager} 构造参数 {fsql} 不能为 null
|
|
||||||
/// </summary>
|
|
||||||
public static string UnitOfWorkManager_Construction_CannotBeNull(object unitOfWorkManager, object fsql)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("UnitOfWorkManager_Construction_CannotBeNull", nameof(unitOfWorkManager), nameof(fsql)),
|
|
||||||
unitOfWorkManager, fsql);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString}
|
|
||||||
/// </summary>
|
|
||||||
public static string UpdateError_Filter(object filterKey, object filterValueExpression, object entityString)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("UpdateError_Filter", nameof(filterKey), nameof(filterValueExpression), nameof(entityString)),
|
|
||||||
filterKey, filterValueExpression, entityString);
|
|
||||||
|
|
||||||
private static string GetString(string name, params string[] formatterNames)
|
|
||||||
{
|
|
||||||
var value = _resourceManager.GetString(name,_resourceCulture);
|
|
||||||
for (var i = 0; i < formatterNames.Length; i++)
|
|
||||||
{
|
|
||||||
value = value.Replace("{" + formatterNames[i] + "}", "{" + i + "}");
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<#
|
|
||||||
Session["ResourceFile"] = "DbContextStrings.resx";
|
|
||||||
Session["AccessModifier"] = "public";
|
|
||||||
#>
|
|
||||||
<#@ include file="../../FreeSql/Properties/Resources.tt" #>
|
|
||||||
@@ -1,246 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<data name="AddFreeDbContextError_CheckConstruction" xml:space="preserve">
|
|
||||||
<value>FreeSql: An error occurred in AddFreeDbContext, check that the construction parameters of {dbContextTypeName} have been injected correctly</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAdd_AlreadyExistsInStateManagement" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not addable, already exists in state management: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAdd_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not addable, entity has no primary key: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAdd_PrimaryKey_NotSet" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not addable, no value for primary key set: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAdd_SelfIncreasingHasValue" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not addable, self-increasing attribute has value: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAttach_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not attachable, entity has no primary key: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAttach_PrimaryKey_NotSet" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not attachable, no value for primary key set: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotDelete_DataNotTracked_ShouldQuery" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not deletable, data not tracked, should query first: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotDelete_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not deletable, entity has no primary key: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotDelete_PrimaryKey_NotSet" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not deletable, no value for primary key set: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotEdit_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not editable, entity has no primary key: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotUpdate_DataShouldQueryOrAttach" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not updatable, data not tracked, should be queried first or Attach:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotUpdate_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not updatable, entity has no primary key: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotUpdate_PrimaryKey_NotSet" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not updatable, no value for primary key set: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotUpdate_RecordDoesNotExist" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not updatable, the record does not exist in the database: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ConfigureUseFreeSql" xml:space="preserve">
|
|
||||||
<value>FreeSql: Please configure UseFreeSql in OnConfiguring or AddFreeDbContext</value>
|
|
||||||
</data>
|
|
||||||
<data name="DbSetAsType_NotSupport_Object" xml:space="preserve">
|
|
||||||
<value>FreeSql: DbSet. AsType parameter error, please pass in the correct entity type</value>
|
|
||||||
</data>
|
|
||||||
<data name="EntityType_CannotConvert" xml:space="preserve">
|
|
||||||
<value>FreeSql: Entity type {EntityTypeName} cannot be converted to {name} and cannot use this method</value>
|
|
||||||
</data>
|
|
||||||
<data name="EntityType_PrimaryKeyError" xml:space="preserve">
|
|
||||||
<value>FreeSql: Entity type {EntityTypeName} Primary key type is not {fullName} and cannot be used with this method</value>
|
|
||||||
</data>
|
|
||||||
<data name="EntityType_PrimaryKeyIsNotOne" xml:space="preserve">
|
|
||||||
<value>FreeSql: Entity type {EntityTypeName} Primary key number is not 1 and cannot be used with this method</value>
|
|
||||||
</data>
|
|
||||||
<data name="FailedSetFilter_NotBelongIRpository" xml:space="preserve">
|
|
||||||
<value>FreeSql: FreeSql. Repository failed to set filter because object does not belong to IRepository</value>
|
|
||||||
</data>
|
|
||||||
<data name="Incomparable_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not comparable, entity has no primary key: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Incomparable_PrimaryKey_NotSet" xml:space="preserve">
|
|
||||||
<value>FreeSql: Non-comparable, no value for primary key set: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="InsertError_Filter" xml:space="preserve">
|
|
||||||
<value>FreeSql: FreeSql.Repository Insert failed because the filter {filterKey}: {filterValueExpression} was set and the inserted data does not conform to {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ISelectAsType_ParameterError" xml:space="preserve">
|
|
||||||
<value>FreeSql: ISelect. AsType parameter does not support specifying as object</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Property" xml:space="preserve">
|
|
||||||
<value>FreeSql: Property {propertyName} does not exist for {tableTypeFullName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFoundMethod_StatesRemoveByObjects" xml:space="preserve">
|
|
||||||
<value>FreeSql: Method DbSet<> not found. StatesRemoveByObjects</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterDataTypeError" xml:space="preserve">
|
|
||||||
<value>FreeSql: Parameter data type error {entityTypeFullName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError" xml:space="preserve">
|
|
||||||
<value>FreeSql: Parameter error {param}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_CannotBeNull" xml:space="preserve">
|
|
||||||
<value>FreeSql: Parameter error {param} cannot be null</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_IsNot_CollectionProperties" xml:space="preserve">
|
|
||||||
<value>FreeSql: Parameter error {many} is not a collection property</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotFound_CollectionProperties" xml:space="preserve">
|
|
||||||
<value>FreeSql: Parameter error {many} Collection property does not exist</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotFound_Property" xml:space="preserve">
|
|
||||||
<value>FreeSql: Parameter error {one} attribute does not exist</value>
|
|
||||||
</data>
|
|
||||||
<data name="Propagation_Mandatory" xml:space="preserve">
|
|
||||||
<value>FreeSql: Propagation_ Mandatory: With the current transaction, throw an exception if there is no current transaction</value>
|
|
||||||
</data>
|
|
||||||
<data name="Propagation_Never" xml:space="preserve">
|
|
||||||
<value>FreeSql: Propagation_ Never: Perform the operation non-transactionally and throw an exception if the current transaction exists</value>
|
|
||||||
</data>
|
|
||||||
<data name="PropertyOfType_IsNot_OneToManyOrManyToMany" xml:space="preserve">
|
|
||||||
<value>FreeSql: Property {propertyName} of type {tableTypeFullName} is not OneToMany or ManyToMany attribute</value>
|
|
||||||
</data>
|
|
||||||
<data name="SpecialError_BatchAdditionFailed" xml:space="preserve">
|
|
||||||
<value>FreeSql: Special error: Bulk add failed, {dataType} returned data, does not match the number added</value>
|
|
||||||
</data>
|
|
||||||
<data name="SpecialError_UpdateFailedDataNotTracked" xml:space="preserve">
|
|
||||||
<value>FreeSql: Special error: Update failed, data not tracked: {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="TransactionHasBeenStarted" xml:space="preserve">
|
|
||||||
<value>FreeSql: Transaction opened, unit of work cannot be disabled</value>
|
|
||||||
</data>
|
|
||||||
<data name="TypeHasSetProperty_IgnoreAttribute" xml:space="preserve">
|
|
||||||
<value>FreeSql: The {tableTypeFullName} type has set the property {propertyName} Ignore the attribute</value>
|
|
||||||
</data>
|
|
||||||
<data name="UnitOfWorkManager_Construction_CannotBeNull" xml:space="preserve">
|
|
||||||
<value>FreeSql: The {unitOfWorkManager} constructor parameter {fsql} cannot be null</value>
|
|
||||||
</data>
|
|
||||||
<data name="UpdateError_Filter" xml:space="preserve">
|
|
||||||
<value>FreeSql: FreeSql.Repository Update failed because the filter {filterKey}: {filterValueExpression} is set and the updated data does not conform to {entityString}</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
|
||||||
@@ -1,246 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<data name="AddFreeDbContextError_CheckConstruction" xml:space="preserve">
|
|
||||||
<value>AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAdd_AlreadyExistsInStateManagement" xml:space="preserve">
|
|
||||||
<value>不可添加,已存在于状态管理:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAdd_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>不可添加,实体没有主键:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAdd_PrimaryKey_NotSet" xml:space="preserve">
|
|
||||||
<value>不可添加,未设置主键的值:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAdd_SelfIncreasingHasValue" xml:space="preserve">
|
|
||||||
<value>不可添加,自增属性有值:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAttach_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>不可附加,实体没有主键:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotAttach_PrimaryKey_NotSet" xml:space="preserve">
|
|
||||||
<value>不可附加,未设置主键的值:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotDelete_DataNotTracked_ShouldQuery" xml:space="preserve">
|
|
||||||
<value>不可删除,数据未被跟踪,应该先查询:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotDelete_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>不可删除,实体没有主键:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotDelete_PrimaryKey_NotSet" xml:space="preserve">
|
|
||||||
<value>不可删除,未设置主键的值:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotEdit_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>不可进行编辑,实体没有主键:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotUpdate_DataShouldQueryOrAttach" xml:space="preserve">
|
|
||||||
<value>不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotUpdate_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>不可更新,实体没有主键:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotUpdate_PrimaryKey_NotSet" xml:space="preserve">
|
|
||||||
<value>不可更新,未设置主键的值:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="CannotUpdate_RecordDoesNotExist" xml:space="preserve">
|
|
||||||
<value>不可更新,数据库不存在该记录:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ConfigureUseFreeSql" xml:space="preserve">
|
|
||||||
<value>请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql</value>
|
|
||||||
</data>
|
|
||||||
<data name="DbSetAsType_NotSupport_Object" xml:space="preserve">
|
|
||||||
<value>DbSet.AsType 参数错误,请传入正确的实体类型</value>
|
|
||||||
</data>
|
|
||||||
<data name="EntityType_CannotConvert" xml:space="preserve">
|
|
||||||
<value>实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法</value>
|
|
||||||
</data>
|
|
||||||
<data name="EntityType_PrimaryKeyError" xml:space="preserve">
|
|
||||||
<value>实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法</value>
|
|
||||||
</data>
|
|
||||||
<data name="EntityType_PrimaryKeyIsNotOne" xml:space="preserve">
|
|
||||||
<value>实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法</value>
|
|
||||||
</data>
|
|
||||||
<data name="FailedSetFilter_NotBelongIRpository" xml:space="preserve">
|
|
||||||
<value>FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository</value>
|
|
||||||
</data>
|
|
||||||
<data name="Incomparable_EntityHasNo_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>不可比较,实体没有主键:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Incomparable_PrimaryKey_NotSet" xml:space="preserve">
|
|
||||||
<value>不可比较,未设置主键的值:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="InsertError_Filter" xml:space="preserve">
|
|
||||||
<value>FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ISelectAsType_ParameterError" xml:space="preserve">
|
|
||||||
<value>ISelect.AsType 参数不支持指定为 object</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Property" xml:space="preserve">
|
|
||||||
<value>{tableTypeFullName} 不存在属性 {propertyName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFoundMethod_StatesRemoveByObjects" xml:space="preserve">
|
|
||||||
<value>找不到方法 DbSet<>.StatesRemoveByObjects</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterDataTypeError" xml:space="preserve">
|
|
||||||
<value>参数 data 类型错误 {entityTypeFullName} </value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError" xml:space="preserve">
|
|
||||||
<value>参数错误 {param}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_CannotBeNull" xml:space="preserve">
|
|
||||||
<value>参数错误 {param} 不能为 null</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_IsNot_CollectionProperties" xml:space="preserve">
|
|
||||||
<value>参数错误 {many} 不是集合属性</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotFound_CollectionProperties" xml:space="preserve">
|
|
||||||
<value>参数错误 {many} 集合属性不存在</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotFound_Property" xml:space="preserve">
|
|
||||||
<value>参数错误 {one} 属性不存在</value>
|
|
||||||
</data>
|
|
||||||
<data name="Propagation_Mandatory" xml:space="preserve">
|
|
||||||
<value>Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常</value>
|
|
||||||
</data>
|
|
||||||
<data name="Propagation_Never" xml:space="preserve">
|
|
||||||
<value>Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常</value>
|
|
||||||
</data>
|
|
||||||
<data name="PropertyOfType_IsNot_OneToManyOrManyToMany" xml:space="preserve">
|
|
||||||
<value>{tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性</value>
|
|
||||||
</data>
|
|
||||||
<data name="SpecialError_BatchAdditionFailed" xml:space="preserve">
|
|
||||||
<value>特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配</value>
|
|
||||||
</data>
|
|
||||||
<data name="SpecialError_UpdateFailedDataNotTracked" xml:space="preserve">
|
|
||||||
<value>特别错误:更新失败,数据未被跟踪:{entityString}</value>
|
|
||||||
</data>
|
|
||||||
<data name="TransactionHasBeenStarted" xml:space="preserve">
|
|
||||||
<value>已开启事务,不能禁用工作单元</value>
|
|
||||||
</data>
|
|
||||||
<data name="TypeHasSetProperty_IgnoreAttribute" xml:space="preserve">
|
|
||||||
<value>{tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性</value>
|
|
||||||
</data>
|
|
||||||
<data name="UnitOfWorkManager_Construction_CannotBeNull" xml:space="preserve">
|
|
||||||
<value>{unitOfWorkManager} 构造参数 {fsql} 不能为 null</value>
|
|
||||||
</data>
|
|
||||||
<data name="UpdateError_Filter" xml:space="preserve">
|
|
||||||
<value>FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString}</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
|
||||||
@@ -197,12 +197,12 @@ namespace FreeSql
|
|||||||
TEntity CheckTKeyAndReturnIdEntity(TKey id)
|
TEntity CheckTKeyAndReturnIdEntity(TKey id)
|
||||||
{
|
{
|
||||||
var tb = _db.OrmOriginal.CodeFirst.GetTableByEntity(EntityType);
|
var tb = _db.OrmOriginal.CodeFirst.GetTableByEntity(EntityType);
|
||||||
if (tb.Primarys.Length != 1) throw new Exception(DbContextStrings.EntityType_PrimaryKeyIsNotOne(EntityType.Name));
|
if (tb.Primarys.Length != 1) throw new Exception(DbContextErrorStrings.EntityType_PrimaryKeyIsNotOne(EntityType.Name));
|
||||||
if (tb.Primarys[0].CsType.NullableTypeOrThis() != typeof(TKey).NullableTypeOrThis()) throw new Exception(DbContextStrings.EntityType_PrimaryKeyError(EntityType.Name, typeof(TKey).FullName));
|
if (tb.Primarys[0].CsType.NullableTypeOrThis() != typeof(TKey).NullableTypeOrThis()) throw new Exception(DbContextErrorStrings.EntityType_PrimaryKeyError(EntityType.Name, typeof(TKey).FullName));
|
||||||
var obj = tb.Type.CreateInstanceGetDefaultValue();
|
var obj = tb.Type.CreateInstanceGetDefaultValue();
|
||||||
_db.OrmOriginal.SetEntityValueWithPropertyName(tb.Type, obj, tb.Primarys[0].CsName, id);
|
_db.OrmOriginal.SetEntityValueWithPropertyName(tb.Type, obj, tb.Primarys[0].CsName, id);
|
||||||
var ret = obj as TEntity;
|
var ret = obj as TEntity;
|
||||||
if (ret == null) throw new Exception(DbContextStrings.EntityType_CannotConvert(EntityType.Name, typeof(TEntity).Name));
|
if (ret == null) throw new Exception(DbContextErrorStrings.EntityType_CannotConvert(EntityType.Name, typeof(TEntity).Name));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,6 +68,12 @@ namespace FreeSql
|
|||||||
await _db.SaveChangesAsync(cancellationToken);
|
await _db.SaveChangesAsync(cancellationToken);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual async Task SaveManyAsync(TEntity entity, string propertyName, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
await _dbset.SaveManyAsync(entity, propertyName, cancellationToken);
|
||||||
|
await _db.SaveChangesAsync(cancellationToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
partial class BaseRepository<TEntity, TKey>
|
partial class BaseRepository<TEntity, TKey>
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ namespace FreeSql
|
|||||||
Task<int> UpdateAsync(TEntity entity, CancellationToken cancellationToken = default);
|
Task<int> UpdateAsync(TEntity entity, CancellationToken cancellationToken = default);
|
||||||
Task<int> UpdateAsync(IEnumerable<TEntity> entitys, CancellationToken cancellationToken = default);
|
Task<int> UpdateAsync(IEnumerable<TEntity> entitys, CancellationToken cancellationToken = default);
|
||||||
Task<TEntity> InsertOrUpdateAsync(TEntity entity, CancellationToken cancellationToken = default);
|
Task<TEntity> InsertOrUpdateAsync(TEntity entity, CancellationToken cancellationToken = default);
|
||||||
|
Task SaveManyAsync(TEntity entity, string propertyName, CancellationToken cancellationToken = default);
|
||||||
|
|
||||||
Task<int> DeleteAsync(TEntity entity, CancellationToken cancellationToken = default);
|
Task<int> DeleteAsync(TEntity entity, CancellationToken cancellationToken = default);
|
||||||
Task<int> DeleteAsync(IEnumerable<TEntity> entitys, CancellationToken cancellationToken = default);
|
Task<int> DeleteAsync(IEnumerable<TEntity> entitys, CancellationToken cancellationToken = default);
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ namespace FreeSql
|
|||||||
public void Close()
|
public void Close()
|
||||||
{
|
{
|
||||||
if (_tran != null)
|
if (_tran != null)
|
||||||
throw new Exception(DbContextStrings.TransactionHasBeenStarted);
|
throw new Exception(DbContextErrorStrings.TransactionHasBeenStarted);
|
||||||
|
|
||||||
Enable = false;
|
Enable = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ namespace FreeSql
|
|||||||
|
|
||||||
public UnitOfWorkManager(IFreeSql fsql)
|
public UnitOfWorkManager(IFreeSql fsql)
|
||||||
{
|
{
|
||||||
if (fsql == null) throw new ArgumentNullException(DbContextStrings.UnitOfWorkManager_Construction_CannotBeNull(nameof(UnitOfWorkManager), nameof(fsql)));
|
if (fsql == null) throw new ArgumentNullException(DbContextErrorStrings.UnitOfWorkManager_Construction_CannotBeNull(nameof(UnitOfWorkManager), nameof(fsql)));
|
||||||
_ormScoped = DbContextScopedFreeSql.Create(fsql, null, () => this.Current);
|
_ormScoped = DbContextScopedFreeSql.Create(fsql, null, () => this.Current);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
case Propagation.Required: return FindedUowCreateVirtual() ?? CreateUow(isolationLevel);
|
case Propagation.Required: return FindedUowCreateVirtual() ?? CreateUow(isolationLevel);
|
||||||
case Propagation.Supports: return FindedUowCreateVirtual() ?? CreateUowNothing(_allUows.LastOrDefault()?.IsNotSupported ?? false);
|
case Propagation.Supports: return FindedUowCreateVirtual() ?? CreateUowNothing(_allUows.LastOrDefault()?.IsNotSupported ?? false);
|
||||||
case Propagation.Mandatory: return FindedUowCreateVirtual() ?? throw new Exception(DbContextStrings.Propagation_Mandatory);
|
case Propagation.Mandatory: return FindedUowCreateVirtual() ?? throw new Exception(DbContextErrorStrings.Propagation_Mandatory);
|
||||||
case Propagation.NotSupported: return CreateUowNothing(true);
|
case Propagation.NotSupported: return CreateUowNothing(true);
|
||||||
case Propagation.Never:
|
case Propagation.Never:
|
||||||
var isNotSupported = _allUows.LastOrDefault()?.IsNotSupported ?? false;
|
var isNotSupported = _allUows.LastOrDefault()?.IsNotSupported ?? false;
|
||||||
@@ -101,7 +101,7 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
for (var a = _rawUows.Count - 1; a >= 0; a--)
|
for (var a = _rawUows.Count - 1; a >= 0; a--)
|
||||||
if (_rawUows[a].Uow.GetOrBeginTransaction(false) != null)
|
if (_rawUows[a].Uow.GetOrBeginTransaction(false) != null)
|
||||||
throw new Exception(DbContextStrings.Propagation_Never);
|
throw new Exception(DbContextErrorStrings.Propagation_Never);
|
||||||
}
|
}
|
||||||
return CreateUowNothing(isNotSupported);
|
return CreateUowNothing(isNotSupported);
|
||||||
case Propagation.Nested: return CreateUow(isolationLevel);
|
case Propagation.Nested: return CreateUow(isolationLevel);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net8.0;net7.0;net6.0;net5.0;netcoreapp3.1;netstandard2.1;netstandard2.0;net45;net40</TargetFrameworks>
|
<TargetFrameworks>net9.0;net8.0;net7.0;net6.0;net5.0;netcoreapp3.1;netstandard2.1;netstandard2.0;net45;net40</TargetFrameworks>
|
||||||
<Authors>FreeSql;ncc;YeXiangQin</Authors>
|
<Authors>FreeSql;ncc;YeXiangQin</Authors>
|
||||||
<Description>FreeSql Implementation of General Repository, Support MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/Clickhouse/DuckDB/TDengine/QuestDB/达梦/人大金仓/南大通用/虚谷/神舟通用/翰高/Access, and read/write separation、and split table.</Description>
|
<Description>FreeSql Implementation of General Repository, Support MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/Clickhouse/DuckDB/TDengine/QuestDB/达梦/人大金仓/南大通用/虚谷/神舟通用/翰高/Access, and read/write separation、and split table.</Description>
|
||||||
<PackageProjectUrl>https://github.com/2881099/FreeSql/wiki/Repository</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/2881099/FreeSql/wiki/Repository</PackageProjectUrl>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>false</DelaySign>
|
<DelaySign>false</DelaySign>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -454,5 +454,74 @@ WHERE (a.""ID"" = 1) AND ROWNUM < 2";
|
|||||||
|
|
||||||
public enum TableAllTypeEnumType1 { e1, e2, e3, e5 }
|
public enum TableAllTypeEnumType1 { e1, e2, e3, e5 }
|
||||||
[Flags] public enum TableAllTypeEnumType2 { f1, f2, f3 }
|
[Flags] public enum TableAllTypeEnumType2 { f1, f2, f3 }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UpgradeTableStructure()
|
||||||
|
{
|
||||||
|
g.dameng.CodeFirst.SyncStructure<TableUpgradeTest>();
|
||||||
|
|
||||||
|
g.dameng.Delete<TableUpgradeTest>()
|
||||||
|
.Where(item => 1 == 1)
|
||||||
|
.ExecuteAffrows();
|
||||||
|
|
||||||
|
var text = new StringBuilder();
|
||||||
|
var temp = "1234567890哈";
|
||||||
|
for (int i = 0; i < 3000 - temp.Length; i+= temp.Length)
|
||||||
|
{
|
||||||
|
text.Append(temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
var mode = new TableUpgradeTest
|
||||||
|
{
|
||||||
|
Name = "1234560123456012哈哈哈哈哈呵呵_123123",
|
||||||
|
Text = text.ToString(),
|
||||||
|
Text2 = "呵呵呵Test123123123"
|
||||||
|
};
|
||||||
|
|
||||||
|
mode.Id = g.dameng.Insert(mode)
|
||||||
|
.ExecuteIdentity();
|
||||||
|
|
||||||
|
// 第二次进行数据库结果同步
|
||||||
|
var sql = g.dameng.CodeFirst.GetComparisonDDLStatements<TableUpgradeTest>();
|
||||||
|
g.dameng.Ado.ExecuteNonQuery(sql);
|
||||||
|
//g.dameng.CodeFirst.SyncStructure<TableSubString>();
|
||||||
|
|
||||||
|
var resultMode = g.dameng.Select<TableUpgradeTest>()
|
||||||
|
.Where(item => item.Id == mode.Id)
|
||||||
|
.First();
|
||||||
|
|
||||||
|
Assert.Equal(mode.Name, resultMode?.Name);
|
||||||
|
Assert.Equal(mode.Text, resultMode?.Text);
|
||||||
|
Assert.Equal(mode.Text2, resultMode?.Text2);
|
||||||
|
Assert.Equal(mode.Text3, resultMode?.Text3);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[Table(Name = "tb_upgrade_test")]
|
||||||
|
public class TableUpgradeTest
|
||||||
|
{
|
||||||
|
[Column(Name = "id", IsPrimary = true, IsIdentity = true)]
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column(Name = "name", StringLength = 31, IsNullable = false)]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
[Column(Name = "text", StringLength = 32767, IsNullable = false)]
|
||||||
|
public string Text { get; set; }
|
||||||
|
|
||||||
|
[Column(Name = "number_test", IsNullable = false)]
|
||||||
|
public int TestNumber { get; set; }
|
||||||
|
|
||||||
|
[Column(Name = "text2", StringLength = 63)]
|
||||||
|
public string Text2 { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column(Name = "text3")]
|
||||||
|
public string Text3 { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,14 +47,14 @@ namespace FreeSql.DataAnnotations
|
|||||||
{
|
{
|
||||||
var atm = Regex.Match(AsTable, @"([\w_\d]+)\s*=\s*(\d\d\d\d)\s*\-\s*(\d\d?)\s*\-\s*(\d\d?)\s*( [\d:]+)?\(([\d,]+)\s*(year|month|day|hour)\)", RegexOptions.IgnoreCase);
|
var atm = Regex.Match(AsTable, @"([\w_\d]+)\s*=\s*(\d\d\d\d)\s*\-\s*(\d\d?)\s*\-\s*(\d\d?)\s*( [\d:]+)?\(([\d,]+)\s*(year|month|day|hour)\)", RegexOptions.IgnoreCase);
|
||||||
if (atm.Success == false)
|
if (atm.Success == false)
|
||||||
throw new Exception(CoreStrings.AsTable_PropertyName_FormatError(AsTable));
|
throw new Exception(CoreErrorStrings.AsTable_PropertyName_FormatError(AsTable));
|
||||||
|
|
||||||
tb.AsTableColumn = tb.Columns.TryGetValue(atm.Groups[1].Value, out var trycol) ? trycol :
|
tb.AsTableColumn = tb.Columns.TryGetValue(atm.Groups[1].Value, out var trycol) ? trycol :
|
||||||
tb.ColumnsByCs.TryGetValue(atm.Groups[1].Value, out trycol) ? trycol : throw new Exception(CoreStrings.NotFound_Table_Property_AsTable(atm.Groups[1].Value));
|
tb.ColumnsByCs.TryGetValue(atm.Groups[1].Value, out trycol) ? trycol : throw new Exception(CoreErrorStrings.NotFound_Table_Property_AsTable(atm.Groups[1].Value));
|
||||||
if (tb.AsTableColumn.Attribute.MapType.NullableTypeOrThis() != typeof(DateTime))
|
if (tb.AsTableColumn.Attribute.MapType.NullableTypeOrThis() != typeof(DateTime))
|
||||||
{
|
{
|
||||||
tb.AsTableColumn = null;
|
tb.AsTableColumn = null;
|
||||||
throw new Exception(CoreStrings.AsTable_PropertyName_NotDateTime(atm.Groups[1].Value));
|
throw new Exception(CoreErrorStrings.AsTable_PropertyName_NotDateTime(atm.Groups[1].Value));
|
||||||
}
|
}
|
||||||
var beginTime = $"{atm.Groups[2].Value}-{atm.Groups[3].Value}-{atm.Groups[4].Value}";
|
var beginTime = $"{atm.Groups[2].Value}-{atm.Groups[3].Value}-{atm.Groups[4].Value}";
|
||||||
var atm5 = atm.Groups[5].Value;
|
var atm5 = atm.Groups[5].Value;
|
||||||
@@ -77,7 +77,7 @@ namespace FreeSql.DataAnnotations
|
|||||||
case "day": return dt.AddDays(atm6);
|
case "day": return dt.AddDays(atm6);
|
||||||
case "hour": return dt.AddHours(atm6);
|
case "hour": return dt.AddHours(atm6);
|
||||||
}
|
}
|
||||||
throw new NotImplementedException(CoreStrings.Functions_AsTable_NotImplemented(AsTable));
|
throw new NotImplementedException(CoreErrorStrings.Functions_AsTable_NotImplemented(AsTable));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -118,13 +118,13 @@ namespace FreeSql.DataAnnotations
|
|||||||
|
|
||||||
public DateTimeAsTableImpl(string tableName, DateTime beginTime, Func<DateTime, int, DateTime> nextTimeFunc)
|
public DateTimeAsTableImpl(string tableName, DateTime beginTime, Func<DateTime, int, DateTime> nextTimeFunc)
|
||||||
{
|
{
|
||||||
if (nextTimeFunc == null) throw new ArgumentException(CoreStrings.Cannot_Be_NULL_Name("nextTimeFunc"));
|
if (nextTimeFunc == null) throw new ArgumentException(CoreErrorStrings.Cannot_Be_NULL_Name("nextTimeFunc"));
|
||||||
//beginTime = beginTime.Date; //日期部分作为开始
|
//beginTime = beginTime.Date; //日期部分作为开始
|
||||||
_beginTime = beginTime;
|
_beginTime = beginTime;
|
||||||
_nextTimeFunc = nextTimeFunc;
|
_nextTimeFunc = nextTimeFunc;
|
||||||
_tableName = tableName;
|
_tableName = tableName;
|
||||||
_tableNameFormat = _regTableNameFormat.Match(tableName);
|
_tableNameFormat = _regTableNameFormat.Match(tableName);
|
||||||
if (string.IsNullOrEmpty(_tableNameFormat.Groups[1].Value)) throw new ArgumentException(CoreStrings.TableName_Format_Error("yyyyMMdd"));
|
if (string.IsNullOrEmpty(_tableNameFormat.Groups[1].Value)) throw new ArgumentException(CoreErrorStrings.TableName_Format_Error("yyyyMMdd"));
|
||||||
ExpandTable(beginTime, DateTime.Now);
|
ExpandTable(beginTime, DateTime.Now);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@ namespace FreeSql.DataAnnotations
|
|||||||
{
|
{
|
||||||
var dtstr = beginTime.ToString(_tableNameFormat.Groups[1].Value);
|
var dtstr = beginTime.ToString(_tableNameFormat.Groups[1].Value);
|
||||||
var name = _tableName.Replace(_tableNameFormat.Groups[0].Value, dtstr);
|
var name = _tableName.Replace(_tableNameFormat.Groups[0].Value, dtstr);
|
||||||
if (_allTables.Contains(name)) throw new ArgumentException(CoreStrings.Generated_Same_SubTable(_tableName));
|
if (_allTables.Contains(name)) throw new ArgumentException(CoreErrorStrings.Generated_Same_SubTable(_tableName));
|
||||||
_allTables.Insert(0, name);
|
_allTables.Insert(0, name);
|
||||||
_allTablesTime.Insert(0, beginTime);
|
_allTablesTime.Insert(0, beginTime);
|
||||||
_lastTime = _nextTimeFunc(beginTime, index++);
|
_lastTime = _nextTimeFunc(beginTime, index++);
|
||||||
@@ -160,26 +160,26 @@ namespace FreeSql.DataAnnotations
|
|||||||
}
|
}
|
||||||
DateTime ParseColumnValue(object columnValue)
|
DateTime ParseColumnValue(object columnValue)
|
||||||
{
|
{
|
||||||
if (columnValue == null) throw new Exception(CoreStrings.SubTableFieldValue_IsNotNull);
|
if (columnValue == null) throw new Exception(CoreErrorStrings.SubTableFieldValue_IsNotNull);
|
||||||
DateTime dt;
|
DateTime dt;
|
||||||
if (columnValue is DateTime || columnValue is DateTime?)
|
if (columnValue is DateTime || columnValue is DateTime?)
|
||||||
dt = (DateTime)columnValue;
|
dt = (DateTime)columnValue;
|
||||||
else if (columnValue is string)
|
else if (columnValue is string)
|
||||||
{
|
{
|
||||||
if (DateTime.TryParse(string.Concat(columnValue), out dt) == false) throw new Exception(CoreStrings.SubTableFieldValue_NotConvertDateTime(columnValue));
|
if (DateTime.TryParse(string.Concat(columnValue), out dt) == false) throw new Exception(CoreErrorStrings.SubTableFieldValue_NotConvertDateTime(columnValue));
|
||||||
}
|
}
|
||||||
else if (columnValue is int || columnValue is long)
|
else if (columnValue is int || columnValue is long)
|
||||||
{
|
{
|
||||||
dt = new DateTime(1970, 1, 1).AddSeconds((double)columnValue);
|
dt = new DateTime(1970, 1, 1).AddSeconds((double)columnValue);
|
||||||
}
|
}
|
||||||
else throw new Exception(CoreStrings.SubTableFieldValue_NotConvertDateTime(columnValue));
|
else throw new Exception(CoreErrorStrings.SubTableFieldValue_NotConvertDateTime(columnValue));
|
||||||
return dt;
|
return dt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetTableNameByColumnValue(object columnValue, bool autoExpand = false)
|
public string GetTableNameByColumnValue(object columnValue, bool autoExpand = false)
|
||||||
{
|
{
|
||||||
var dt = ParseColumnValue(columnValue);
|
var dt = ParseColumnValue(columnValue);
|
||||||
if (dt < _beginTime) throw new Exception(CoreStrings.SubTableFieldValue_CannotLessThen(dt.ToString("yyyy-MM-dd HH:mm:ss"), _beginTime.ToString("yyyy-MM-dd HH:mm:ss")));
|
if (dt < _beginTime) throw new Exception(CoreErrorStrings.SubTableFieldValue_CannotLessThen(dt.ToString("yyyy-MM-dd HH:mm:ss"), _beginTime.ToString("yyyy-MM-dd HH:mm:ss")));
|
||||||
if (dt >= _lastTime && autoExpand)
|
if (dt >= _lastTime && autoExpand)
|
||||||
{
|
{
|
||||||
// 扩容分表
|
// 扩容分表
|
||||||
@@ -192,7 +192,7 @@ namespace FreeSql.DataAnnotations
|
|||||||
if (dt >= _allTablesTime[a])
|
if (dt >= _allTablesTime[a])
|
||||||
return _allTables[a];
|
return _allTables[a];
|
||||||
}
|
}
|
||||||
throw new Exception(CoreStrings.SubTableFieldValue_NotMatchTable(dt.ToString("yyyy-MM-dd HH:mm:ss")));
|
throw new Exception(CoreErrorStrings.SubTableFieldValue_NotMatchTable(dt.ToString("yyyy-MM-dd HH:mm:ss")));
|
||||||
}
|
}
|
||||||
public string[] GetTableNamesByColumnValueRange(object columnValue1, object columnValue2)
|
public string[] GetTableNamesByColumnValueRange(object columnValue1, object columnValue2)
|
||||||
{
|
{
|
||||||
@@ -312,7 +312,7 @@ namespace FreeSql.DataAnnotations
|
|||||||
{
|
{
|
||||||
var val1 = LocalGetParamValue(m.Groups[1].Value);
|
var val1 = LocalGetParamValue(m.Groups[1].Value);
|
||||||
var val2 = LocalGetParamValue(m.Groups[2].Value);
|
var val2 = LocalGetParamValue(m.Groups[2].Value);
|
||||||
if (val1 == null || val2 == null) throw new Exception(CoreStrings.Failed_SubTable_FieldValue(sqlWhere));
|
if (val1 == null || val2 == null) throw new Exception(CoreErrorStrings.Failed_SubTable_FieldValue(sqlWhere));
|
||||||
return new IAsTableTableNameRangeResult(GetTableNamesByColumnValueRange(val1, val2), ParseColumnValue(val1), ParseColumnValue(val2));
|
return new IAsTableTableNameRangeResult(GetTableNamesByColumnValueRange(val1, val2), ParseColumnValue(val1), ParseColumnValue(val2));
|
||||||
}
|
}
|
||||||
m = regs[8].Match(newSqlWhere);
|
m = regs[8].Match(newSqlWhere);
|
||||||
@@ -320,14 +320,14 @@ namespace FreeSql.DataAnnotations
|
|||||||
{
|
{
|
||||||
var val1 = LocalGetParamValue(m.Groups[2].Value);
|
var val1 = LocalGetParamValue(m.Groups[2].Value);
|
||||||
var val2 = LocalGetParamValue(m.Groups[4].Value);
|
var val2 = LocalGetParamValue(m.Groups[4].Value);
|
||||||
if (val1 == null || val2 == null) throw new Exception(CoreStrings.Failed_SubTable_FieldValue(sqlWhere));
|
if (val1 == null || val2 == null) throw new Exception(CoreErrorStrings.Failed_SubTable_FieldValue(sqlWhere));
|
||||||
return LocalGetTables(m.Groups[1].Value, m.Groups[3].Value, ParseColumnValue(val1), ParseColumnValue(val2));
|
return LocalGetTables(m.Groups[1].Value, m.Groups[3].Value, ParseColumnValue(val1), ParseColumnValue(val2));
|
||||||
}
|
}
|
||||||
m = regs[10].Match(newSqlWhere);
|
m = regs[10].Match(newSqlWhere);
|
||||||
if (m.Success)
|
if (m.Success)
|
||||||
{
|
{
|
||||||
var val1 = LocalGetParamValue(m.Groups[2].Value);
|
var val1 = LocalGetParamValue(m.Groups[2].Value);
|
||||||
if (val1 == null) throw new Exception(CoreStrings.Failed_SubTable_FieldValue(sqlWhere));
|
if (val1 == null) throw new Exception(CoreErrorStrings.Failed_SubTable_FieldValue(sqlWhere));
|
||||||
return LocalGetTables2(m.Groups[1].Value, ParseColumnValue(val1));
|
return LocalGetTables2(m.Groups[1].Value, ParseColumnValue(val1));
|
||||||
}
|
}
|
||||||
return new IAsTableTableNameRangeResult(_GetDefaultAllTables?.Invoke(AllTables) ?? AllTables, _beginTime, _lastTime);
|
return new IAsTableTableNameRangeResult(_GetDefaultAllTables?.Invoke(AllTables) ?? AllTables, _beginTime, _lastTime);
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ namespace FreeSql.DataAnnotations
|
|||||||
|
|
||||||
public ColumnFluent Property(string proto)
|
public ColumnFluent Property(string proto)
|
||||||
{
|
{
|
||||||
if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreStrings.NotFound_PropertyName(proto));
|
if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreErrorStrings.NotFound_PropertyName(proto));
|
||||||
var col = _table._columns.GetOrAdd(tryProto.Name, name => new ColumnAttribute { });
|
var col = _table._columns.GetOrAdd(tryProto.Name, name => new ColumnAttribute { });
|
||||||
return new ColumnFluent(col, tryProto, _entityType);
|
return new ColumnFluent(col, tryProto, _entityType);
|
||||||
}
|
}
|
||||||
@@ -76,7 +76,7 @@ namespace FreeSql.DataAnnotations
|
|||||||
public TableFluent Navigate(string proto, string bind, string tempPrimary) => NavigateInternal(proto, bind, tempPrimary, null);
|
public TableFluent Navigate(string proto, string bind, string tempPrimary) => NavigateInternal(proto, bind, tempPrimary, null);
|
||||||
TableFluent NavigateInternal(string proto, string bind, string tempPrimary, Type manyToMany)
|
TableFluent NavigateInternal(string proto, string bind, string tempPrimary, Type manyToMany)
|
||||||
{
|
{
|
||||||
if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreStrings.NotFound_Property(proto));
|
if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreErrorStrings.NotFound_Property(proto));
|
||||||
var nav = new NavigateAttribute { Bind = bind, TempPrimary = tempPrimary, ManyToMany = manyToMany };
|
var nav = new NavigateAttribute { Bind = bind, TempPrimary = tempPrimary, ManyToMany = manyToMany };
|
||||||
_table._navigates.AddOrUpdate(tryProto.Name, nav, (name, old) => nav);
|
_table._navigates.AddOrUpdate(tryProto.Name, nav, (name, old) => nav);
|
||||||
return this;
|
return this;
|
||||||
@@ -156,12 +156,12 @@ namespace FreeSql.DataAnnotations
|
|||||||
var exp = column?.Body;
|
var exp = column?.Body;
|
||||||
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
var proto = (exp as MemberExpression)?.Member;
|
var proto = (exp as MemberExpression)?.Member;
|
||||||
if (proto == null) throw new FormatException(CoreStrings.Bad_Expression_Format(column));
|
if (proto == null) throw new FormatException(CoreErrorStrings.Bad_Expression_Format(column));
|
||||||
return Property(proto.Name);
|
return Property(proto.Name);
|
||||||
}
|
}
|
||||||
public ColumnFluent Property(string proto)
|
public ColumnFluent Property(string proto)
|
||||||
{
|
{
|
||||||
if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreStrings.NotFound_PropertyName(proto));
|
if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreErrorStrings.NotFound_PropertyName(proto));
|
||||||
var col = _table._columns.GetOrAdd(tryProto.Name, name => new ColumnAttribute { });
|
var col = _table._columns.GetOrAdd(tryProto.Name, name => new ColumnAttribute { });
|
||||||
return new ColumnFluent(col, tryProto, typeof(T));
|
return new ColumnFluent(col, tryProto, typeof(T));
|
||||||
}
|
}
|
||||||
@@ -181,14 +181,14 @@ namespace FreeSql.DataAnnotations
|
|||||||
var exp = proto?.Body;
|
var exp = proto?.Body;
|
||||||
if (exp.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
if (exp.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand;
|
||||||
var member = (exp as MemberExpression)?.Member;
|
var member = (exp as MemberExpression)?.Member;
|
||||||
if (member == null) throw new FormatException(CoreStrings.Bad_Expression_Format(proto));
|
if (member == null) throw new FormatException(CoreErrorStrings.Bad_Expression_Format(proto));
|
||||||
return NavigateInternal(member.Name, bind, tempPrimary, manyToMany);
|
return NavigateInternal(member.Name, bind, tempPrimary, manyToMany);
|
||||||
}
|
}
|
||||||
public TableFluent<T> Navigate(string proto, string bind, Type manyToMany = null) => NavigateInternal(proto, bind, null, manyToMany);
|
public TableFluent<T> Navigate(string proto, string bind, Type manyToMany = null) => NavigateInternal(proto, bind, null, manyToMany);
|
||||||
public TableFluent<T> Navigate(string proto, string bind, string tempPrimary) => NavigateInternal(proto, bind, tempPrimary, null);
|
public TableFluent<T> Navigate(string proto, string bind, string tempPrimary) => NavigateInternal(proto, bind, tempPrimary, null);
|
||||||
TableFluent<T> NavigateInternal(string proto, string bind, string tempPrimary, Type manyToMany)
|
TableFluent<T> NavigateInternal(string proto, string bind, string tempPrimary, Type manyToMany)
|
||||||
{
|
{
|
||||||
if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreStrings.NotFound_PropertyName(proto));
|
if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreErrorStrings.NotFound_PropertyName(proto));
|
||||||
var nav = new NavigateAttribute { Bind = bind, TempPrimary = tempPrimary, ManyToMany = manyToMany };
|
var nav = new NavigateAttribute { Bind = bind, TempPrimary = tempPrimary, ManyToMany = manyToMany };
|
||||||
_table._navigates.AddOrUpdate(tryProto.Name, nav, (name, old) => nav);
|
_table._navigates.AddOrUpdate(tryProto.Name, nav, (name, old) => nav);
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ namespace FreeSql
|
|||||||
static object _dicCurdLock = new object();
|
static object _dicCurdLock = new object();
|
||||||
static IFreeSql GetCrud(IDbConnection dbconn)
|
static IFreeSql GetCrud(IDbConnection dbconn)
|
||||||
{
|
{
|
||||||
if (dbconn == null) throw new ArgumentNullException($"{nameof(dbconn)} {CoreStrings.Cannot_Be_NULL}");
|
if (dbconn == null) throw new ArgumentNullException($"{nameof(dbconn)} {CoreErrorStrings.Cannot_Be_NULL}");
|
||||||
if (dbconn.ConnectionString == null) throw new ArgumentNullException($"{nameof(dbconn)}.ConnectionString {CoreStrings.Cannot_Be_NULL}");
|
if (dbconn.ConnectionString == null) throw new ArgumentNullException($"{nameof(dbconn)}.ConnectionString {CoreErrorStrings.Cannot_Be_NULL}");
|
||||||
Type dbconType = dbconn.GetType();
|
Type dbconType = dbconn.GetType();
|
||||||
var connType = dbconType.UnderlyingSystemType;
|
var connType = dbconType.UnderlyingSystemType;
|
||||||
if (_dicCurd.TryGetValue(dbconn.ConnectionString, out var fsql)) return fsql;
|
if (_dicCurd.TryGetValue(dbconn.ConnectionString, out var fsql)) return fsql;
|
||||||
@@ -25,49 +25,49 @@ namespace FreeSql
|
|||||||
case "MySqlConnection":
|
case "MySqlConnection":
|
||||||
providerType = Type.GetType("FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySql")?.MakeGenericType(connType);
|
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) providerType = Type.GetType("FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySqlConnector")?.MakeGenericType(connType);
|
||||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("MySql"));
|
if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("MySql"));
|
||||||
break;
|
break;
|
||||||
case "SqlConnection":
|
case "SqlConnection":
|
||||||
providerType = Type.GetType("FreeSql.SqlServer.SqlServerProvider`1,FreeSql.Provider.SqlServer")?.MakeGenericType(connType);
|
providerType = Type.GetType("FreeSql.SqlServer.SqlServerProvider`1,FreeSql.Provider.SqlServer")?.MakeGenericType(connType);
|
||||||
if (providerType == null) providerType = Type.GetType("FreeSql.SqlServer.SqlServerProvider`1,FreeSql.Provider.SqlServerForSystem")?.MakeGenericType(connType);
|
if (providerType == null) providerType = Type.GetType("FreeSql.SqlServer.SqlServerProvider`1,FreeSql.Provider.SqlServerForSystem")?.MakeGenericType(connType);
|
||||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("SqlServer/SqlServerForSystem"));
|
if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("SqlServer/SqlServerForSystem"));
|
||||||
break;
|
break;
|
||||||
case "NpgsqlConnection":
|
case "NpgsqlConnection":
|
||||||
providerType = Type.GetType("FreeSql.PostgreSQL.PostgreSQLProvider`1,FreeSql.Provider.PostgreSQL")?.MakeGenericType(connType);
|
providerType = Type.GetType("FreeSql.PostgreSQL.PostgreSQLProvider`1,FreeSql.Provider.PostgreSQL")?.MakeGenericType(connType);
|
||||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("PostgreSQL"));
|
if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("PostgreSQL"));
|
||||||
break;
|
break;
|
||||||
case "OracleConnection":
|
case "OracleConnection":
|
||||||
providerType = Type.GetType("FreeSql.Oracle.OracleProvider`1,FreeSql.Provider.Oracle")?.MakeGenericType(connType);
|
providerType = Type.GetType("FreeSql.Oracle.OracleProvider`1,FreeSql.Provider.Oracle")?.MakeGenericType(connType);
|
||||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Oracle"));
|
if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("Oracle"));
|
||||||
break;
|
break;
|
||||||
case "SQLiteConnection":
|
case "SQLiteConnection":
|
||||||
case "SqliteConnection":
|
case "SqliteConnection":
|
||||||
providerType = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.Sqlite")?.MakeGenericType(connType);
|
providerType = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.Sqlite")?.MakeGenericType(connType);
|
||||||
if (providerType == null) providerType = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.SqliteCore")?.MakeGenericType(connType); //Microsoft.Data.Sqlite.Core.dll
|
if (providerType == null) providerType = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.SqliteCore")?.MakeGenericType(connType); //Microsoft.Data.Sqlite.Core.dll
|
||||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Sqlite/SqliteCore"));
|
if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("Sqlite/SqliteCore"));
|
||||||
break;
|
break;
|
||||||
case "DmConnection":
|
case "DmConnection":
|
||||||
providerType = Type.GetType("FreeSql.Dameng.DamengProvider`1,FreeSql.Provider.Dameng")?.MakeGenericType(connType);
|
providerType = Type.GetType("FreeSql.Dameng.DamengProvider`1,FreeSql.Provider.Dameng")?.MakeGenericType(connType);
|
||||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Dameng"));
|
if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("Dameng"));
|
||||||
break;
|
break;
|
||||||
case "OscarConnection":
|
case "OscarConnection":
|
||||||
providerType = Type.GetType("FreeSql.ShenTong.ShenTongProvider`1,FreeSql.Provider.ShenTong")?.MakeGenericType(connType);
|
providerType = Type.GetType("FreeSql.ShenTong.ShenTongProvider`1,FreeSql.Provider.ShenTong")?.MakeGenericType(connType);
|
||||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("ShenTong"));
|
if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("ShenTong"));
|
||||||
break;
|
break;
|
||||||
case "KdbndpConnection":
|
case "KdbndpConnection":
|
||||||
providerType = Type.GetType("FreeSql.KingbaseES.KingbaseESProvider`1,FreeSql.Provider.KingbaseES")?.MakeGenericType(connType);
|
providerType = Type.GetType("FreeSql.KingbaseES.KingbaseESProvider`1,FreeSql.Provider.KingbaseES")?.MakeGenericType(connType);
|
||||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("KingbaseES"));
|
if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("KingbaseES"));
|
||||||
break;
|
break;
|
||||||
case "FbConnection":
|
case "FbConnection":
|
||||||
providerType = Type.GetType("FreeSql.Firebird.FirebirdProvider`1,FreeSql.Provider.Firebird")?.MakeGenericType(connType);
|
providerType = Type.GetType("FreeSql.Firebird.FirebirdProvider`1,FreeSql.Provider.Firebird")?.MakeGenericType(connType);
|
||||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Firebird"));
|
if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("Firebird"));
|
||||||
break;
|
break;
|
||||||
case "ClickHouseConnection":
|
case "ClickHouseConnection":
|
||||||
providerType = Type.GetType("FreeSql.ClickHouse.ClickHouseProvider`1,FreeSql.Provider.ClickHouse")?.MakeGenericType(connType);
|
providerType = Type.GetType("FreeSql.ClickHouse.ClickHouseProvider`1,FreeSql.Provider.ClickHouse")?.MakeGenericType(connType);
|
||||||
if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("ClickHouse"));
|
if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("ClickHouse"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception(CoreStrings.Not_Implemented);
|
throw new Exception(CoreErrorStrings.Not_Implemented);
|
||||||
}
|
}
|
||||||
lock (_dicCurdLock)
|
lock (_dicCurdLock)
|
||||||
{
|
{
|
||||||
@@ -79,7 +79,7 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
static IFreeSql GetCrud(IDbTransaction dbtran)
|
static IFreeSql GetCrud(IDbTransaction dbtran)
|
||||||
{
|
{
|
||||||
if (dbtran == null) throw new ArgumentNullException($"{nameof(dbtran)} {CoreStrings.Cannot_Be_NULL}");
|
if (dbtran == null) throw new ArgumentNullException($"{nameof(dbtran)} {CoreErrorStrings.Cannot_Be_NULL}");
|
||||||
return GetCrud(dbtran.Connection);
|
return GetCrud(dbtran.Connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -253,9 +253,9 @@ namespace FreeSql.Extensions.EntityUtil
|
|||||||
)
|
)
|
||||||
});
|
});
|
||||||
exps.AddRange(new Expression[] {
|
exps.AddRange(new Expression[] {
|
||||||
Expression.Return(returnTarget, var2Ret),
|
Expression.Return(returnTarget, var2Ret),
|
||||||
Expression.Label(returnTarget, Expression.Default(typeof(object)))
|
Expression.Label(returnTarget, Expression.Default(typeof(object)))
|
||||||
});
|
});
|
||||||
return Expression.Lambda<Func<object, object>>(Expression.Block(new[] { var1Parm, var2Ret }, exps), new[] { parm1 }).Compile();
|
return Expression.Lambda<Func<object, object>>(Expression.Block(new[] { var1Parm, var2Ret }, exps), new[] { parm1 }).Compile();
|
||||||
});
|
});
|
||||||
return func(entity);
|
return func(entity);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -193,7 +193,7 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
.OrderBy(a => a.IsPublic ? 0 : 1)
|
.OrderBy(a => a.IsPublic ? 0 : 1)
|
||||||
.FirstOrDefault();
|
.FirstOrDefault();
|
||||||
}));
|
}));
|
||||||
if (ret.Value == null && isThrow) throw new ArgumentException(CoreStrings.Type_Cannot_Access_Constructor(that.FullName));
|
if (ret.Value == null && isThrow) throw new ArgumentException(CoreErrorStrings.Type_Cannot_Access_Constructor(that.FullName));
|
||||||
return ret.Value;
|
return ret.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -416,7 +416,7 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
var t1sel = orm.Select<object>().AsType(entityType) as Select1Provider<object>;
|
var t1sel = orm.Select<object>().AsType(entityType) as Select1Provider<object>;
|
||||||
var t1expFul = t1sel.ConvertStringPropertyToExpression(property, true);
|
var t1expFul = t1sel.ConvertStringPropertyToExpression(property, true);
|
||||||
var t1exp = props.Length == 1 ? t1expFul : t1sel.ConvertStringPropertyToExpression(props[0], true);
|
var t1exp = props.Length == 1 ? t1expFul : t1sel.ConvertStringPropertyToExpression(props[0], true);
|
||||||
if (t1expFul == null) throw new ArgumentException(CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property)));
|
if (t1expFul == null) throw new ArgumentException(CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property)));
|
||||||
var propElementType = t1expFul.Type.GetGenericArguments().FirstOrDefault() ?? t1expFul.Type.GetElementType();
|
var propElementType = t1expFul.Type.GetGenericArguments().FirstOrDefault() ?? t1expFul.Type.GetElementType();
|
||||||
if (propElementType != null) //IncludeMany
|
if (propElementType != null) //IncludeMany
|
||||||
{
|
{
|
||||||
@@ -432,7 +432,7 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
var tbtr = t1tb.GetTableRef(props[0], true, true);
|
var tbtr = t1tb.GetTableRef(props[0], true, true);
|
||||||
if (tbtr == null) throw new ArgumentException(CoreStrings.ParameterError_NotValid_Navigation(nameof(property)));
|
if (tbtr == null) throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_Navigation(nameof(property)));
|
||||||
var reftb = orm.CodeFirst.GetTableByEntity(t1exp.Type);
|
var reftb = orm.CodeFirst.GetTableByEntity(t1exp.Type);
|
||||||
var refsel = orm.Select<object>().AsType(t1exp.Type) as Select1Provider<object>;
|
var refsel = orm.Select<object>().AsType(t1exp.Type) as Select1Provider<object>;
|
||||||
if (props.Length > 1)
|
if (props.Length > 1)
|
||||||
@@ -479,14 +479,14 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
}
|
}
|
||||||
var sel = orm.Select<object>().AsType(entityType) as Select1Provider<object>;
|
var sel = orm.Select<object>().AsType(entityType) as Select1Provider<object>;
|
||||||
var exp = sel.ConvertStringPropertyToExpression(property, true);
|
var exp = sel.ConvertStringPropertyToExpression(property, true);
|
||||||
if (exp == null) throw new ArgumentException(CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property)));
|
if (exp == null) throw new ArgumentException(CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property)));
|
||||||
var memExp = exp as MemberExpression;
|
var memExp = exp as MemberExpression;
|
||||||
if (memExp == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}2");
|
if (memExp == null) throw new ArgumentException($"{CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))}2");
|
||||||
var parTb = orm.CodeFirst.GetTableByEntity(memExp.Expression.Type);
|
var parTb = orm.CodeFirst.GetTableByEntity(memExp.Expression.Type);
|
||||||
if (parTb == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}3");
|
if (parTb == null) throw new ArgumentException($"{CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))}3");
|
||||||
var propElementType = exp.Type.GetGenericArguments().FirstOrDefault() ?? exp.Type.GetElementType();
|
var propElementType = exp.Type.GetGenericArguments().FirstOrDefault() ?? exp.Type.GetElementType();
|
||||||
var reftb = orm.CodeFirst.GetTableByEntity(propElementType);
|
var reftb = orm.CodeFirst.GetTableByEntity(propElementType);
|
||||||
if (reftb == null) throw new ArgumentException(CoreStrings.ParameterError_NotValid_Collection(nameof(property)));
|
if (reftb == null) throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_Collection(nameof(property)));
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(where) == false)
|
if (string.IsNullOrWhiteSpace(where) == false)
|
||||||
{
|
{
|
||||||
@@ -499,12 +499,12 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
for (var a = 0; a < whereSplit.Length; a++)
|
for (var a = 0; a < whereSplit.Length; a++)
|
||||||
{
|
{
|
||||||
var keyval = whereSplit[a].Split('=').Select(x => x.Trim()).Where(x => string.IsNullOrWhiteSpace(x) == false).ToArray();
|
var keyval = whereSplit[a].Split('=').Select(x => x.Trim()).Where(x => string.IsNullOrWhiteSpace(x) == false).ToArray();
|
||||||
if (keyval.Length != 2) throw new ArgumentException(CoreStrings.ParameterError_NotValid_UseCommas(nameof(where)));
|
if (keyval.Length != 2) throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_UseCommas(nameof(where)));
|
||||||
|
|
||||||
if (reftb.ColumnsByCs.TryGetValue(keyval[0], out var keycol) == false)
|
if (reftb.ColumnsByCs.TryGetValue(keyval[0], out var keycol) == false)
|
||||||
throw new ArgumentException(CoreStrings.ParameterError_NotValid_PropertyName(nameof(where), keyval[0], reftb.Type.DisplayCsharp()));
|
throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_PropertyName(nameof(where), keyval[0], reftb.Type.DisplayCsharp()));
|
||||||
if (parTb.ColumnsByCs.TryGetValue(keyval[1], out var valcol) == false)
|
if (parTb.ColumnsByCs.TryGetValue(keyval[1], out var valcol) == false)
|
||||||
throw new ArgumentException(CoreStrings.ParameterError_NotValid_PropertyName(nameof(where), keyval[1], parTb.Type.DisplayCsharp()));
|
throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_PropertyName(nameof(where), keyval[1], parTb.Type.DisplayCsharp()));
|
||||||
|
|
||||||
var tmpExp = Expression.Equal(
|
var tmpExp = Expression.Equal(
|
||||||
Expression.Convert(Expression.MakeMemberAccess(refparamExp, reftb.Properties[keyval[0]]), valcol.CsType),
|
Expression.Convert(Expression.MakeMemberAccess(refparamExp, reftb.Properties[keyval[0]]), valcol.CsType),
|
||||||
@@ -530,7 +530,7 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
select.Split(',').Select(x => x.Trim()).Where(x => string.IsNullOrWhiteSpace(x) == false).Select(a =>
|
select.Split(',').Select(x => x.Trim()).Where(x => string.IsNullOrWhiteSpace(x) == false).Select(a =>
|
||||||
{
|
{
|
||||||
if (reftb.ColumnsByCs.TryGetValue(a, out var col) == false)
|
if (reftb.ColumnsByCs.TryGetValue(a, out var col) == false)
|
||||||
throw new ArgumentException(CoreStrings.ParameterError_NotValid_PropertyName(nameof(select), a, reftb.Type.DisplayCsharp()));
|
throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_PropertyName(nameof(select), a, reftb.Type.DisplayCsharp()));
|
||||||
return Expression.Bind(reftb.Properties[col.CsName], Expression.MakeMemberAccess(refparamExp, reftb.Properties[col.CsName]));
|
return Expression.Bind(reftb.Properties[col.CsName], Expression.MakeMemberAccess(refparamExp, reftb.Properties[col.CsName]));
|
||||||
}).ToArray());
|
}).ToArray());
|
||||||
|
|
||||||
@@ -555,7 +555,7 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
}
|
}
|
||||||
var navigateSelector = Expression.Lambda(funcType, exp, sel._tables[0].Parameter);
|
var navigateSelector = Expression.Lambda(funcType, exp, sel._tables[0].Parameter);
|
||||||
var incMethod = sel.GetType().GetMethod("IncludeMany");
|
var incMethod = sel.GetType().GetMethod("IncludeMany");
|
||||||
if (incMethod == null) throw new Exception(CoreStrings.RunTimeError_Reflection_IncludeMany);
|
if (incMethod == null) throw new Exception(CoreErrorStrings.RunTimeError_Reflection_IncludeMany);
|
||||||
incMethod.MakeGenericMethod(reftb.Type).Invoke(sel, new object[] { navigateSelector, newthen });
|
incMethod.MakeGenericMethod(reftb.Type).Invoke(sel, new object[] { navigateSelector, newthen });
|
||||||
return sel;
|
return sel;
|
||||||
}
|
}
|
||||||
@@ -639,7 +639,7 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
var navs = tb.GetAllTableRef().Where(a => a.Value.Exception == null).Select(a => a.Value)
|
var navs = tb.GetAllTableRef().Where(a => a.Value.Exception == null).Select(a => a.Value)
|
||||||
.Where(a => a.RefType == FreeSql.Internal.Model.TableRefType.OneToMany && a.RefEntityType == tb.Type).ToArray();
|
.Where(a => a.RefType == FreeSql.Internal.Model.TableRefType.OneToMany && a.RefEntityType == tb.Type).ToArray();
|
||||||
|
|
||||||
if (navs.Length != 1) throw new ArgumentException(CoreStrings.Entity_NotParentChild_Relationship(tb.Type.FullName));
|
if (navs.Length != 1) throw new ArgumentException(CoreErrorStrings.Entity_NotParentChild_Relationship(tb.Type.FullName));
|
||||||
var tbref = navs[0];
|
var tbref = navs[0];
|
||||||
|
|
||||||
var cteName = "as_tree_cte";
|
var cteName = "as_tree_cte";
|
||||||
@@ -693,7 +693,7 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
}
|
}
|
||||||
if (int.TryParse((mysqlVersion ?? "").Split('.')[0], out var mysqlVersionFirst) && mysqlVersionFirst < 8)
|
if (int.TryParse((mysqlVersion ?? "").Split('.')[0], out var mysqlVersionFirst) && mysqlVersionFirst < 8)
|
||||||
{
|
{
|
||||||
if (tbref.Columns.Count > 1) throw new ArgumentException(CoreStrings.Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys(tb.Type.FullName));
|
if (tbref.Columns.Count > 1) throw new ArgumentException(CoreErrorStrings.Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys(tb.Type.FullName));
|
||||||
var mysql56Sql = "";
|
var mysql56Sql = "";
|
||||||
if (up == false)
|
if (up == false)
|
||||||
{
|
{
|
||||||
@@ -751,6 +751,7 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec
|
|||||||
case DataType.Firebird:
|
case DataType.Firebird:
|
||||||
case DataType.ClickHouse:
|
case DataType.ClickHouse:
|
||||||
case DataType.DuckDB:
|
case DataType.DuckDB:
|
||||||
|
case DataType.Xugu:
|
||||||
sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule,
|
sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule,
|
||||||
Expression.Call(typeof(Convert).GetMethod("ToString", new Type[] { typeof(string) }), pathSelector?.Body), select._diymemexpWithTempQuery, null, null);
|
Expression.Call(typeof(Convert).GetMethod("ToString", new Type[] { typeof(string) }), pathSelector?.Body), select._diymemexpWithTempQuery, null, null);
|
||||||
break;
|
break;
|
||||||
@@ -847,6 +848,7 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec
|
|||||||
case DataType.CustomMySql:
|
case DataType.CustomMySql:
|
||||||
case DataType.Firebird:
|
case DataType.Firebird:
|
||||||
case DataType.DuckDB:
|
case DataType.DuckDB:
|
||||||
|
case DataType.Xugu:
|
||||||
nsselsb.Append("RECURSIVE ");
|
nsselsb.Append("RECURSIVE ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -900,6 +902,7 @@ SELECT ");
|
|||||||
case DataType.KingbaseES:
|
case DataType.KingbaseES:
|
||||||
case DataType.ShenTong:
|
case DataType.ShenTong:
|
||||||
case DataType.DuckDB:
|
case DataType.DuckDB:
|
||||||
|
case DataType.Xugu:
|
||||||
return that.OrderBy("random()");
|
return that.OrderBy("random()");
|
||||||
case DataType.Oracle:
|
case DataType.Oracle:
|
||||||
case DataType.OdbcOracle:
|
case DataType.OdbcOracle:
|
||||||
@@ -913,7 +916,7 @@ SELECT ");
|
|||||||
case DataType.Firebird:
|
case DataType.Firebird:
|
||||||
return that.OrderBy("rand()");
|
return that.OrderBy("rand()");
|
||||||
}
|
}
|
||||||
throw new NotSupportedException($"{CoreStrings.Not_Support_OrderByRandom(s0p._orm.Ado.DataType)}");
|
throw new NotSupportedException($"{CoreErrorStrings.Not_Support_OrderByRandom(s0p._orm.Ado.DataType)}");
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -1083,9 +1086,9 @@ SELECT ");
|
|||||||
public long ExecuteIdentity(string identityColumn)
|
public long ExecuteIdentity(string identityColumn)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(identityColumn))
|
if (string.IsNullOrEmpty(identityColumn))
|
||||||
throw new Exception(CoreStrings.Cannot_Be_NULL_Name(nameof(identityColumn)));
|
throw new Exception(CoreErrorStrings.Cannot_Be_NULL_Name(nameof(identityColumn)));
|
||||||
if (_insertProvider._table.ColumnsByCs.TryGetValue(identityColumn, out var col) == false)
|
if (_insertProvider._table.ColumnsByCs.TryGetValue(identityColumn, out var col) == false)
|
||||||
throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(identityColumn).Replace(nameof(ExecuteIdentity), ""));
|
throw new Exception(CoreErrorStrings.GetPrimarys_ParameterError_IsNotDictKey(identityColumn).Replace(nameof(ExecuteIdentity), ""));
|
||||||
col.Attribute.IsIdentity = true;
|
col.Attribute.IsIdentity = true;
|
||||||
return _insertProvider.ExecuteIdentity();
|
return _insertProvider.ExecuteIdentity();
|
||||||
}
|
}
|
||||||
@@ -1098,9 +1101,9 @@ SELECT ");
|
|||||||
public Task<long> ExecuteIdentityAsync(string identityColumn, CancellationToken cancellationToken = default)
|
public Task<long> ExecuteIdentityAsync(string identityColumn, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(identityColumn))
|
if (string.IsNullOrEmpty(identityColumn))
|
||||||
throw new Exception(CoreStrings.Cannot_Be_NULL_Name(nameof(identityColumn)));
|
throw new Exception(CoreErrorStrings.Cannot_Be_NULL_Name(nameof(identityColumn)));
|
||||||
if (_insertProvider._table.ColumnsByCs.TryGetValue(identityColumn, out var col) == false)
|
if (_insertProvider._table.ColumnsByCs.TryGetValue(identityColumn, out var col) == false)
|
||||||
throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(identityColumn).Replace(nameof(ExecuteIdentity), ""));
|
throw new Exception(CoreErrorStrings.GetPrimarys_ParameterError_IsNotDictKey(identityColumn).Replace(nameof(ExecuteIdentity), ""));
|
||||||
col.Attribute.IsIdentity = true;
|
col.Attribute.IsIdentity = true;
|
||||||
return _insertProvider.ExecuteIdentityAsync(cancellationToken);
|
return _insertProvider.ExecuteIdentityAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
@@ -1163,7 +1166,7 @@ SELECT ");
|
|||||||
foreach (var primary in primarys)
|
foreach (var primary in primarys)
|
||||||
{
|
{
|
||||||
if (table.ColumnsByCs.TryGetValue(string.Concat(primary), out var col)) pks.Add(col);
|
if (table.ColumnsByCs.TryGetValue(string.Concat(primary), out var col)) pks.Add(col);
|
||||||
else throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(primary));
|
else throw new Exception(CoreErrorStrings.GetPrimarys_ParameterError_IsNotDictKey(primary));
|
||||||
}
|
}
|
||||||
return pks.ToArray();
|
return pks.ToArray();
|
||||||
}
|
}
|
||||||
@@ -1182,17 +1185,17 @@ SELECT ");
|
|||||||
col.Attribute.IsIdentity = true;
|
col.Attribute.IsIdentity = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(primary));
|
else throw new Exception(CoreErrorStrings.GetPrimarys_ParameterError_IsNotDictKey(primary));
|
||||||
}
|
}
|
||||||
table.Primarys = table.Columns.Where(a => a.Value.Attribute.IsPrimary).Select(a => a.Value).ToArray();
|
table.Primarys = table.Columns.Where(a => a.Value.Attribute.IsPrimary).Select(a => a.Value).ToArray();
|
||||||
}
|
}
|
||||||
public UpdateDictImpl IsVersion(string version)
|
public UpdateDictImpl IsVersion(string version)
|
||||||
{
|
{
|
||||||
if (_updateProvider._table.ColumnsByCs.TryGetValue(version, out var col) == false)
|
if (_updateProvider._table.ColumnsByCs.TryGetValue(version, out var col) == false)
|
||||||
throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(version).Replace(nameof(GetPrimarys), ""));
|
throw new Exception(CoreErrorStrings.GetPrimarys_ParameterError_IsNotDictKey(version).Replace(nameof(GetPrimarys), ""));
|
||||||
//if (col.Attribute.MapType.IsNullableType() ||
|
//if (col.Attribute.MapType.IsNullableType() ||
|
||||||
// col.Attribute.MapType.IsNumberType() == false && !new[] { typeof(byte[]), typeof(string) }.Contains(col.Attribute.MapType))
|
// col.Attribute.MapType.IsNumberType() == false && !new[] { typeof(byte[]), typeof(string) }.Contains(col.Attribute.MapType))
|
||||||
// throw new Exception(CoreStrings.Properties_AsRowLock_Must_Numeric_Byte(col.CsName));
|
// throw new Exception(CoreErrorStrings.Properties_AsRowLock_Must_Numeric_Byte(col.CsName));
|
||||||
col.Attribute.IsVersion = true;
|
col.Attribute.IsVersion = true;
|
||||||
_updateProvider._table.VersionColumn = col;
|
_updateProvider._table.VersionColumn = col;
|
||||||
_updateProvider._versionColumn = col;
|
_updateProvider._versionColumn = col;
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using FreeSql;
|
using FreeSql;
|
||||||
|
using FreeSql.DataAnnotations;
|
||||||
|
using FreeSql.Internal;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -227,6 +229,12 @@ namespace System.Linq.Expressions
|
|||||||
public static Expression<Func<T1, T2, T3, T4, T5, bool>> Not<T1, T2, T3, T4, T5>(this Expression<Func<T1, T2, T3, T4, T5, bool>> exp, bool condition = true) => (Expression<Func<T1, T2, T3, T4, T5, bool>>)InternalNotExpression(condition, exp);
|
public static Expression<Func<T1, T2, T3, T4, T5, bool>> Not<T1, T2, T3, T4, T5>(this Expression<Func<T1, T2, T3, T4, T5, bool>> exp, bool condition = true) => (Expression<Func<T1, T2, T3, T4, T5, bool>>)InternalNotExpression(condition, exp);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public static bool CanDynamicInvoke(this Expression exp)
|
||||||
|
{
|
||||||
|
var test = new TestCanDynamicInvokeExpressionVisitor();
|
||||||
|
test.Visit(exp);
|
||||||
|
return test.Result;
|
||||||
|
}
|
||||||
public static bool IsParameter(this Expression exp)
|
public static bool IsParameter(this Expression exp)
|
||||||
{
|
{
|
||||||
var test = new TestParameterExpressionVisitor();
|
var test = new TestParameterExpressionVisitor();
|
||||||
@@ -364,6 +372,23 @@ namespace System.Linq.Expressions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal class TestCanDynamicInvokeExpressionVisitor : ExpressionVisitor
|
||||||
|
{
|
||||||
|
public bool Result { get; private set; } = true;
|
||||||
|
|
||||||
|
protected override Expression VisitParameter(ParameterExpression node)
|
||||||
|
{
|
||||||
|
if (Result) Result = false;
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override Expression VisitMethodCall(MethodCallExpression node)
|
||||||
|
{
|
||||||
|
if (Result && node.IsExpressionCall()) Result = false;
|
||||||
|
return base.VisitMethodCall(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal class GetParameterExpressionVisitor : ExpressionVisitor
|
internal class GetParameterExpressionVisitor : ExpressionVisitor
|
||||||
{
|
{
|
||||||
public ParameterExpression Result { get; private set; }
|
public ParameterExpression Result { get; private set; }
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>false</DelaySign>
|
<DelaySign>false</DelaySign>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
@@ -25,12 +25,6 @@
|
|||||||
<None Include="../readme.md" Pack="true" PackagePath="\" />
|
<None Include="../readme.md" Pack="true" PackagePath="\" />
|
||||||
<None Include="../logo.png" Pack="true" PackagePath="\" />
|
<None Include="../logo.png" Pack="true" PackagePath="\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<Compile Remove="Properties\Resources.cs" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Remove="Properties\Resources.tt" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
|
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
|
||||||
@@ -42,11 +36,6 @@
|
|||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Update="Properties\CoreStrings.Designer.cs">
|
|
||||||
<DesignTime>True</DesignTime>
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DependentUpon>CoreStrings.Designer.tt</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -58,13 +47,6 @@
|
|||||||
<Generator>TextTemplatingFileGenerator</Generator>
|
<Generator>TextTemplatingFileGenerator</Generator>
|
||||||
<LastGenOutput>Select1Provider2`16.cs</LastGenOutput>
|
<LastGenOutput>Select1Provider2`16.cs</LastGenOutput>
|
||||||
</None>
|
</None>
|
||||||
<None Update="Properties\CoreStrings.Designer.tt">
|
|
||||||
<Generator>TextTemplatingFileGenerator</Generator>
|
|
||||||
<LastGenOutput>CoreStrings.Designer.cs</LastGenOutput>
|
|
||||||
</None>
|
|
||||||
<EmbeddedResource Update="Properties\CoreStrings.resx">
|
|
||||||
<CustomToolNamespace>FreeSql</CustomToolNamespace>
|
|
||||||
</EmbeddedResource>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -45,7 +45,7 @@ namespace FreeSql
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public FreeSqlBuilder UseConnectionString(DataType dataType, string connectionString, Type providerType = null)
|
public FreeSqlBuilder UseConnectionString(DataType dataType, string connectionString, Type providerType = null)
|
||||||
{
|
{
|
||||||
if (_connectionFactory != null) throw new Exception(CoreStrings.Has_Specified_Cannot_Specified_Second("UseConnectionFactory", "UseConnectionString"));
|
if (_connectionFactory != null) throw new Exception(CoreErrorStrings.Has_Specified_Cannot_Specified_Second("UseConnectionFactory", "UseConnectionString"));
|
||||||
_dataType = dataType;
|
_dataType = dataType;
|
||||||
_masterConnectionString = connectionString;
|
_masterConnectionString = connectionString;
|
||||||
_providerType = providerType;
|
_providerType = providerType;
|
||||||
@@ -86,13 +86,13 @@ namespace FreeSql
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public FreeSqlBuilder UseSlave(params string[] slaveConnectionString)
|
public FreeSqlBuilder UseSlave(params string[] slaveConnectionString)
|
||||||
{
|
{
|
||||||
if (_connectionFactory != null) throw new Exception(CoreStrings.Has_Specified_Cannot_Specified_Second("UseConnectionFactory", "UseSlave"));
|
if (_connectionFactory != null) throw new Exception(CoreErrorStrings.Has_Specified_Cannot_Specified_Second("UseConnectionFactory", "UseSlave"));
|
||||||
_slaveConnectionString = slaveConnectionString;
|
_slaveConnectionString = slaveConnectionString;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public FreeSqlBuilder UseSlaveWeight(params int[] slaveWeights)
|
public FreeSqlBuilder UseSlaveWeight(params int[] slaveWeights)
|
||||||
{
|
{
|
||||||
if (_slaveConnectionString?.Length != slaveWeights.Length) throw new Exception(CoreStrings.Different_Number_SlaveConnectionString_SlaveWeights);
|
if (_slaveConnectionString?.Length != slaveWeights.Length) throw new Exception(CoreErrorStrings.Different_Number_SlaveConnectionString_SlaveWeights);
|
||||||
_slaveWeights = slaveWeights;
|
_slaveWeights = slaveWeights;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@@ -105,8 +105,8 @@ namespace FreeSql
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public FreeSqlBuilder UseConnectionFactory(DataType dataType, Func<DbConnection> connectionFactory, Type providerType = null)
|
public FreeSqlBuilder UseConnectionFactory(DataType dataType, Func<DbConnection> connectionFactory, Type providerType = null)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(_masterConnectionString) == false) throw new Exception(CoreStrings.Has_Specified_Cannot_Specified_Second("UseConnectionString", "UseConnectionFactory"));
|
if (string.IsNullOrEmpty(_masterConnectionString) == false) throw new Exception(CoreErrorStrings.Has_Specified_Cannot_Specified_Second("UseConnectionString", "UseConnectionFactory"));
|
||||||
if (_slaveConnectionString?.Any() == true) throw new Exception(CoreStrings.Has_Specified_Cannot_Specified_Second("UseSlave", "UseConnectionFactory"));
|
if (_slaveConnectionString?.Any() == true) throw new Exception(CoreErrorStrings.Has_Specified_Cannot_Specified_Second("UseSlave", "UseConnectionFactory"));
|
||||||
_dataType = dataType;
|
_dataType = dataType;
|
||||||
_connectionFactory = connectionFactory;
|
_connectionFactory = connectionFactory;
|
||||||
_providerType = providerType;
|
_providerType = providerType;
|
||||||
@@ -244,7 +244,7 @@ namespace FreeSql
|
|||||||
public IFreeSql Build() => Build<IFreeSql>();
|
public IFreeSql Build() => Build<IFreeSql>();
|
||||||
public IFreeSql<TMark> Build<TMark>()
|
public IFreeSql<TMark> Build<TMark>()
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(_masterConnectionString) && _connectionFactory == null) throw new Exception(CoreStrings.Check_UseConnectionString);
|
if (string.IsNullOrEmpty(_masterConnectionString) && _connectionFactory == null) throw new Exception(CoreErrorStrings.Check_UseConnectionString);
|
||||||
IFreeSql<TMark> ret = null;
|
IFreeSql<TMark> ret = null;
|
||||||
var type = _providerType;
|
var type = _providerType;
|
||||||
if (type != null)
|
if (type != null)
|
||||||
@@ -254,7 +254,7 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Action<string, string> throwNotFind = (dll, providerType) => throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package_Reason(dll, providerType));
|
Action<string, string> throwNotFind = (dll, providerType) => throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package_Reason(dll, providerType));
|
||||||
switch (_dataType)
|
switch (_dataType)
|
||||||
{
|
{
|
||||||
case DataType.MySql:
|
case DataType.MySql:
|
||||||
@@ -385,12 +385,7 @@ namespace FreeSql
|
|||||||
if (type == null) throwNotFind("FreeSql.Provider.Duckdb.dll", "FreeSql.Duckdb.DuckdbProvider<>");
|
if (type == null) throwNotFind("FreeSql.Provider.Duckdb.dll", "FreeSql.Duckdb.DuckdbProvider<>");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DataType.TDengine:
|
default: throw new Exception(CoreErrorStrings.NotSpecified_UseConnectionString_UseConnectionFactory);
|
||||||
type = Type.GetType("FreeSql.TDengine.TDengineProvider`1,FreeSql.Provider.TDengine")?.MakeGenericType(typeof(TMark));
|
|
||||||
if (type == null) throwNotFind("FreeSql.Provider.TDengine.dll", "FreeSql.TDengine.TDengineProvider<>");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default: throw new Exception(CoreStrings.NotSpecified_UseConnectionString_UseConnectionFactory);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret = Activator.CreateInstance(type, new object[]
|
ret = Activator.CreateInstance(type, new object[]
|
||||||
|
|||||||
@@ -196,8 +196,20 @@ namespace FreeSql
|
|||||||
ISelect<T1, T2, T3> FromQuery<T2, T3>(ISelect<T2> select2, ISelect<T3> select3) where T2 : class where T3 : class;
|
ISelect<T1, T2, T3> FromQuery<T2, T3>(ISelect<T2> select2, ISelect<T3> select3) where T2 : class where T3 : class;
|
||||||
ISelect<T1, T2, T3, T4> FromQuery<T2, T3, T4>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4) where T2 : class where T3 : class where T4 : class;
|
ISelect<T1, T2, T3, T4> FromQuery<T2, T3, T4>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4) where T2 : class where T3 : class where T4 : class;
|
||||||
ISelect<T1, T2, T3, T4, T5> FromQuery<T2, T3, T4, T5>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5) where T2 : class where T3 : class where T4 : class where T5 : class;
|
ISelect<T1, T2, T3, T4, T5> FromQuery<T2, T3, T4, T5>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5) where T2 : class where T3 : class where T4 : class where T5 : class;
|
||||||
|
ISelect<T1, T2, T3, T4, T5, T6> FromQuery<T2, T3, T4, T5, T6>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class;
|
||||||
|
ISelect<T1, T2, T3, T4, T5, T6, T7> FromQuery<T2, T3, T4, T5, T6, T7>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class;
|
||||||
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8> FromQuery<T2, T3, T4, T5, T6, T7, T8>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class;
|
||||||
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class;
|
||||||
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class;
|
||||||
|
|
||||||
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class;
|
||||||
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11, ISelect<T12> select12) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class;
|
||||||
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11, ISelect<T12> select12, ISelect<T13> select13) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class;
|
||||||
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11, ISelect<T12> select12, ISelect<T13> select13, ISelect<T14> select14) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class;
|
||||||
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11, ISelect<T12> select12, ISelect<T13> select13, ISelect<T14> select14, ISelect<T15> select15) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class;
|
||||||
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11, ISelect<T12> select12, ISelect<T13> select13, ISelect<T14> select14, ISelect<T15> select15, ISelect<T16> select16) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class;
|
||||||
|
|
||||||
ISelect<T1> UnionAll(params ISelect<T1>[] querys);
|
ISelect<T1> UnionAll(params ISelect<T1>[] querys);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查询条件,Where(a => a.Id > 10),支持导航对象查询,Where(a => a.Author.Email == "2881099@qq.com")
|
/// 查询条件,Where(a => a.Id > 10),支持导航对象查询,Where(a => a.Author.Email == "2881099@qq.com")
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -380,7 +392,7 @@ namespace FreeSql
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="source">内存数据</param>
|
/// <param name="source">内存数据</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
ISelect<T1> WithMemory(IEnumerable<T1> source);
|
ISelect<TDto> WithMemory<TDto>(IEnumerable<TDto> source);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 嵌套查询 select * from ( select ... from table ... ) a
|
/// 嵌套查询 select * from ( select ... from table ... ) a
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -654,7 +654,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ReturnConnection(pool, conn, ex); //pool.Return(conn, ex);
|
ReturnConnection(pool, conn, ex); //pool.Return(conn, ex);
|
||||||
if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms");
|
if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms");
|
||||||
}
|
}
|
||||||
LoggerException(pool, pc, new Exception(CoreStrings.Connection_Failed_Switch_Servers), dt, logtxt, false);
|
LoggerException(pool, pc, new Exception(CoreErrorStrings.Connection_Failed_Switch_Servers), dt, logtxt, false);
|
||||||
pc.cmd.Parameters.Clear();
|
pc.cmd.Parameters.Clear();
|
||||||
if (DataType == DataType.Sqlite) pc.cmd.Dispose();
|
if (DataType == DataType.Sqlite) pc.cmd.Dispose();
|
||||||
ExecuteReaderMultiple(multipleResult, connection, transaction, fetchHandler, schemaHandler, cmdType, cmdText, cmdTimeout, cmdParms);
|
ExecuteReaderMultiple(multipleResult, connection, transaction, fetchHandler, schemaHandler, cmdType, cmdText, cmdTimeout, cmdParms);
|
||||||
|
|||||||
@@ -574,7 +574,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ReturnConnection(pool, conn, ex); //pool.Return(conn, ex);
|
ReturnConnection(pool, conn, ex); //pool.Return(conn, ex);
|
||||||
if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms");
|
if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms");
|
||||||
}
|
}
|
||||||
LoggerException(pool, pc, new Exception(CoreStrings.Connection_Failed_Switch_Servers), dt, logtxt, false);
|
LoggerException(pool, pc, new Exception(CoreErrorStrings.Connection_Failed_Switch_Servers), dt, logtxt, false);
|
||||||
pc.cmd.Parameters.Clear();
|
pc.cmd.Parameters.Clear();
|
||||||
if (DataType == DataType.Sqlite) pc.cmd.Dispose();
|
if (DataType == DataType.Sqlite) pc.cmd.Dispose();
|
||||||
await ExecuteReaderMultipleAsync(multipleResult, connection, transaction, fetchHandler, schemaHandler, cmdType, cmdText, cmdTimeout, cmdParms, cancellationToken);
|
await ExecuteReaderMultipleAsync(multipleResult, connection, transaction, fetchHandler, schemaHandler, cmdType, cmdText, cmdTimeout, cmdParms, cancellationToken);
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_trans.TryRemove(tran.Connection.LastGetThreadId, out var oldtran);
|
_trans.TryRemove(tran.Connection.LastGetThreadId, out var oldtran);
|
||||||
|
|
||||||
Exception ex = null;
|
Exception ex = null;
|
||||||
if (string.IsNullOrEmpty(remark)) remark = isCommit ? CoreStrings.Commit : CoreStrings.RollBack;
|
if (string.IsNullOrEmpty(remark)) remark = isCommit ? CoreErrorStrings.Commit : CoreErrorStrings.RollBack;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (tran.Transaction.Connection != null) //用户自行 Commit、Rollback
|
if (tran.Transaction.Connection != null) //用户自行 Commit、Rollback
|
||||||
|
|||||||
@@ -18,23 +18,23 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
public IInsert<T1> Insert<T1>() where T1 : class => CreateInsertProvider<T1>();
|
public IInsert<T1> Insert<T1>() where T1 : class => CreateInsertProvider<T1>();
|
||||||
public IInsert<T1> Insert<T1>(T1 source) where T1 : class
|
public IInsert<T1> Insert<T1>(T1 source) where T1 : class
|
||||||
{
|
{
|
||||||
if (typeof(T1) == typeof(Dictionary<string, object>)) throw new Exception(CoreStrings.Use_InsertDict_Method);
|
if (typeof(T1) == typeof(Dictionary<string, object>)) throw new Exception(CoreErrorStrings.Use_InsertDict_Method);
|
||||||
return this.Insert<T1>().AppendData(source);
|
return this.Insert<T1>().AppendData(source);
|
||||||
}
|
}
|
||||||
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class
|
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class
|
||||||
{
|
{
|
||||||
if (typeof(T1) == typeof(Dictionary<string, object>)) throw new Exception(CoreStrings.Use_InsertDict_Method);
|
if (typeof(T1) == typeof(Dictionary<string, object>)) throw new Exception(CoreErrorStrings.Use_InsertDict_Method);
|
||||||
return this.Insert<T1>().AppendData(source);
|
return this.Insert<T1>().AppendData(source);
|
||||||
}
|
}
|
||||||
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class
|
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
if (typeof(T1) == typeof(Dictionary<string, object>)) throw new Exception(CoreStrings.Use_InsertDict_Method);
|
if (typeof(T1) == typeof(Dictionary<string, object>)) throw new Exception(CoreErrorStrings.Use_InsertDict_Method);
|
||||||
return this.Insert<T1>().AppendData(source);
|
return this.Insert<T1>().AppendData(source);
|
||||||
}
|
}
|
||||||
public IInsert<T1> Insert<T1>(IEnumerable<T1> source) where T1 : class
|
public IInsert<T1> Insert<T1>(IEnumerable<T1> source) where T1 : class
|
||||||
{
|
{
|
||||||
if (typeof(T1) == typeof(Dictionary<string, object>)) throw new Exception(CoreStrings.Use_InsertDict_Method);
|
if (typeof(T1) == typeof(Dictionary<string, object>)) throw new Exception(CoreErrorStrings.Use_InsertDict_Method);
|
||||||
return this.Insert<T1>().AppendData(source);
|
return this.Insert<T1>().AppendData(source);
|
||||||
}
|
}
|
||||||
public IUpdate<T1> Update<T1>() where T1 : class => CreateUpdateProvider<T1>(null);
|
public IUpdate<T1> Update<T1>() where T1 : class => CreateUpdateProvider<T1>(null);
|
||||||
|
|||||||
@@ -176,10 +176,10 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
public IDelete<T1> AsType(Type entityType)
|
public IDelete<T1> AsType(Type entityType)
|
||||||
{
|
{
|
||||||
if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("IDelete"));
|
if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("IDelete"));
|
||||||
if (entityType == _table.Type) return this;
|
if (entityType == _table.Type) return this;
|
||||||
var newtb = _commonUtils.GetTableByEntity(entityType);
|
var newtb = _commonUtils.GetTableByEntity(entityType);
|
||||||
_table = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("IDelete"));
|
_table = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("IDelete"));
|
||||||
if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_isAutoSyncStructure = _orm.CodeFirst.IsAutoSyncStructure;
|
_isAutoSyncStructure = _orm.CodeFirst.IsAutoSyncStructure;
|
||||||
_tempPrimarys = _table?.Primarys ?? new ColumnInfo[0];
|
_tempPrimarys = _table?.Primarys ?? new ColumnInfo[0];
|
||||||
if (_table == null && typeof(T1) != typeof(Dictionary<string, object>))
|
if (_table == null && typeof(T1) != typeof(Dictionary<string, object>))
|
||||||
throw new Exception(CoreStrings.InsertOrUpdate_NotSuport_Generic_UseEntity(typeof(T1)));
|
throw new Exception(CoreErrorStrings.InsertOrUpdate_NotSuport_Generic_UseEntity(typeof(T1)));
|
||||||
if (_isAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
if (_isAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
||||||
IdentityColumn = _table?.Primarys.Where(a => a.Attribute.IsIdentity).FirstOrDefault();
|
IdentityColumn = _table?.Primarys.Where(a => a.Attribute.IsIdentity).FirstOrDefault();
|
||||||
}
|
}
|
||||||
@@ -157,7 +157,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
if (data == null || table == null) return;
|
if (data == null || table == null) return;
|
||||||
if (typeof(T1) == typeof(object) && new[] { table.Type, table.TypeLazy }.Contains(data.GetType()) == false)
|
if (typeof(T1) == typeof(object) && new[] { table.Type, table.TypeLazy }.Contains(data.GetType()) == false)
|
||||||
throw new Exception(CoreStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp()));
|
throw new Exception(CoreErrorStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp()));
|
||||||
if (orm.Aop.AuditValueHandler == null) return;
|
if (orm.Aop.AuditValueHandler == null) return;
|
||||||
foreach (var col in table.Columns.Values)
|
foreach (var col in table.Columns.Values)
|
||||||
{
|
{
|
||||||
@@ -256,10 +256,10 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
public IInsertOrUpdate<T1> AsType(Type entityType)
|
public IInsertOrUpdate<T1> AsType(Type entityType)
|
||||||
{
|
{
|
||||||
if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("IInsertOrUpdate"));
|
if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("IInsertOrUpdate"));
|
||||||
if (entityType == _table.Type) return this;
|
if (entityType == _table.Type) return this;
|
||||||
var newtb = _commonUtils.GetTableByEntity(entityType);
|
var newtb = _commonUtils.GetTableByEntity(entityType);
|
||||||
_table = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("IInsertOrUpdate"));
|
_table = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("IInsertOrUpdate"));
|
||||||
if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
||||||
_tempPrimarys = _table.Primarys;
|
_tempPrimarys = _table.Primarys;
|
||||||
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
||||||
@@ -414,12 +414,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_SplitSourceByIdentityValueIsNullFlag = 2;
|
_SplitSourceByIdentityValueIsNullFlag = 2;
|
||||||
ExecuteBatchOptions(ss.Item2);
|
ExecuteBatchOptions(ss.Item2);
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_transaction.Rollback();
|
_transaction.Rollback();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
_transaction = null;
|
_transaction = null;
|
||||||
@@ -540,12 +540,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_SplitSourceByIdentityValueIsNullFlag = 2;
|
_SplitSourceByIdentityValueIsNullFlag = 2;
|
||||||
await ExecuteBatchOptions(ss.Item2);
|
await ExecuteBatchOptions(ss.Item2);
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_transaction.Rollback();
|
_transaction.Rollback();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
_transaction = null;
|
_transaction = null;
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
if (data == null || table == null) return;
|
if (data == null || table == null) return;
|
||||||
if (typeof(T1) == typeof(object) && new[] { table.Type, table.TypeLazy }.Contains(data.GetType()) == false)
|
if (typeof(T1) == typeof(object) && new[] { table.Type, table.TypeLazy }.Contains(data.GetType()) == false)
|
||||||
throw new Exception(CoreStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp()));
|
throw new Exception(CoreErrorStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp()));
|
||||||
foreach (var col in table.Columns.Values)
|
foreach (var col in table.Columns.Values)
|
||||||
{
|
{
|
||||||
object val = col.GetValue(data);
|
object val = col.GetValue(data);
|
||||||
@@ -297,7 +297,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction);
|
if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction);
|
||||||
using (var conn = _orm.Ado.MasterPool.Get())
|
using (var conn = _orm.Ado.MasterPool.Get())
|
||||||
{
|
{
|
||||||
_transaction = conn.Value.BeginTransaction();
|
_transaction = conn.Value.BeginTransaction();
|
||||||
@@ -312,12 +312,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ret += this.RawExecuteAffrows();
|
ret += this.RawExecuteAffrows();
|
||||||
}
|
}
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_transaction.Rollback();
|
_transaction.Rollback();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
_transaction = null;
|
_transaction = null;
|
||||||
@@ -377,7 +377,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction);
|
if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction);
|
||||||
using (var conn = _orm.Ado.MasterPool.Get())
|
using (var conn = _orm.Ado.MasterPool.Get())
|
||||||
{
|
{
|
||||||
_transaction = conn.Value.BeginTransaction();
|
_transaction = conn.Value.BeginTransaction();
|
||||||
@@ -393,12 +393,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
else ret = this.RawExecuteIdentity();
|
else ret = this.RawExecuteIdentity();
|
||||||
}
|
}
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_transaction.Rollback();
|
_transaction.Rollback();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
_transaction = null;
|
_transaction = null;
|
||||||
@@ -457,7 +457,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction);
|
if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction);
|
||||||
using (var conn = _orm.Ado.MasterPool.Get())
|
using (var conn = _orm.Ado.MasterPool.Get())
|
||||||
{
|
{
|
||||||
_transaction = conn.Value.BeginTransaction();
|
_transaction = conn.Value.BeginTransaction();
|
||||||
@@ -472,12 +472,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ret.AddRange(this.RawExecuteInserted());
|
ret.AddRange(this.RawExecuteInserted());
|
||||||
}
|
}
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_transaction.Rollback();
|
_transaction.Rollback();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
_transaction = null;
|
_transaction = null;
|
||||||
@@ -597,11 +597,11 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
public IInsert<T1> AsType(Type entityType)
|
public IInsert<T1> AsType(Type entityType)
|
||||||
{
|
{
|
||||||
if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("IInsert"));
|
if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("IInsert"));
|
||||||
if (entityType == typeof(T1)) return this;
|
if (entityType == typeof(T1)) return this;
|
||||||
if (entityType == _table.Type) return this;
|
if (entityType == _table.Type) return this;
|
||||||
var newtb = _commonUtils.GetTableByEntity(entityType);
|
var newtb = _commonUtils.GetTableByEntity(entityType);
|
||||||
_table = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("IInsert"));
|
_table = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("IInsert"));
|
||||||
if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
||||||
IgnoreCanInsert();
|
IgnoreCanInsert();
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction);
|
if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction);
|
||||||
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
||||||
{
|
{
|
||||||
_transaction = conn.Value.BeginTransaction();
|
_transaction = conn.Value.BeginTransaction();
|
||||||
@@ -70,12 +70,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ret += await this.RawExecuteAffrowsAsync(cancellationToken);
|
ret += await this.RawExecuteAffrowsAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_transaction.Rollback();
|
_transaction.Rollback();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
_transaction = null;
|
_transaction = null;
|
||||||
@@ -135,7 +135,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction);
|
if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction);
|
||||||
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
||||||
{
|
{
|
||||||
_transaction = conn.Value.BeginTransaction();
|
_transaction = conn.Value.BeginTransaction();
|
||||||
@@ -151,12 +151,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
else ret = await this.RawExecuteIdentityAsync(cancellationToken);
|
else ret = await this.RawExecuteIdentityAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_transaction.Rollback();
|
_transaction.Rollback();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
_transaction = null;
|
_transaction = null;
|
||||||
@@ -215,7 +215,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction);
|
if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction);
|
||||||
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
||||||
{
|
{
|
||||||
_transaction = conn.Value.BeginTransaction();
|
_transaction = conn.Value.BeginTransaction();
|
||||||
@@ -230,12 +230,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ret.AddRange(await this.RawExecuteInsertedAsync(cancellationToken));
|
ret.AddRange(await this.RawExecuteInsertedAsync(cancellationToken));
|
||||||
}
|
}
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_transaction.Rollback();
|
_transaction.Rollback();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
_transaction = null;
|
_transaction = null;
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (exp == null) throw new Exception(CoreStrings.Cannot_Match_Property(property));
|
if (exp == null) throw new Exception(CoreErrorStrings.Cannot_Match_Property(property));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -333,7 +333,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
var tmp1 = field[x];
|
var tmp1 = field[x];
|
||||||
if (_commonUtils.GetTableByEntity(currentType).Properties.TryGetValue(tmp1, out var prop) == false)
|
if (_commonUtils.GetTableByEntity(currentType).Properties.TryGetValue(tmp1, out var prop) == false)
|
||||||
throw new ArgumentException($"{currentType.DisplayCsharp()} {CoreStrings.NotFound_PropertyName(tmp1)}");
|
throw new ArgumentException($"{currentType.DisplayCsharp()} {CoreErrorStrings.NotFound_PropertyName(tmp1)}");
|
||||||
currentType = prop.PropertyType;
|
currentType = prop.PropertyType;
|
||||||
currentExp = Expression.MakeMemberAccess(currentExp, prop);
|
currentExp = Expression.MakeMemberAccess(currentExp, prop);
|
||||||
}
|
}
|
||||||
@@ -412,7 +412,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
callExp = callExp.Object as MethodCallExpression; //忽略第一个方法
|
callExp = callExp.Object as MethodCallExpression; //忽略第一个方法
|
||||||
while (callExp != null)
|
while (callExp != null)
|
||||||
{
|
{
|
||||||
if (callExp?.Type.FullName.StartsWith("FreeSql.ISelect`") == true)
|
if (callExp != null && typeof(ISelect0).IsAssignableFrom(callExp.Type))
|
||||||
{
|
{
|
||||||
callExpStack.Push(callExp);
|
callExpStack.Push(callExp);
|
||||||
callExp = callExp.Object as MethodCallExpression;
|
callExp = callExp.Object as MethodCallExpression;
|
||||||
@@ -796,7 +796,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
public IDelete<T1> ToDelete()
|
public IDelete<T1> ToDelete()
|
||||||
{
|
{
|
||||||
if (_tables[0].Table.Primarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("ToDelete", _tables[0].Table.CsName));
|
if (_tables[0].Table.Primarys.Any() == false) throw new Exception(CoreErrorStrings.Entity_Must_Primary_Key("ToDelete", _tables[0].Table.CsName));
|
||||||
var del = (_orm as BaseDbProvider).CreateDeleteProvider<T1>(null) as DeleteProvider<T1>;
|
var del = (_orm as BaseDbProvider).CreateDeleteProvider<T1>(null) as DeleteProvider<T1>;
|
||||||
if (_tables[0].Table.Type != typeof(T1)) del.AsType(_tables[0].Table.Type);
|
if (_tables[0].Table.Type != typeof(T1)) del.AsType(_tables[0].Table.Type);
|
||||||
if (_params.Any()) del._params = new List<DbParameter>(_params.ToArray());
|
if (_params.Any()) del._params = new List<DbParameter>(_params.ToArray());
|
||||||
@@ -830,7 +830,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
public IUpdate<T1> ToUpdate()
|
public IUpdate<T1> ToUpdate()
|
||||||
{
|
{
|
||||||
if (_tables[0].Table.Primarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("ToUpdate", _tables[0].Table.CsName));
|
if (_tables[0].Table.Primarys.Any() == false) throw new Exception(CoreErrorStrings.Entity_Must_Primary_Key("ToUpdate", _tables[0].Table.CsName));
|
||||||
var upd = (_orm as BaseDbProvider).CreateUpdateProvider<T1>(null) as UpdateProvider<T1>;
|
var upd = (_orm as BaseDbProvider).CreateUpdateProvider<T1>(null) as UpdateProvider<T1>;
|
||||||
if (_tables[0].Table.Type != typeof(T1)) upd.AsType(_tables[0].Table.Type);
|
if (_tables[0].Table.Type != typeof(T1)) upd.AsType(_tables[0].Table.Type);
|
||||||
if (_params.Any()) upd._params = new List<DbParameter>(_params.ToArray());
|
if (_params.Any()) upd._params = new List<DbParameter>(_params.ToArray());
|
||||||
@@ -1018,10 +1018,10 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
public TSelect AsType(Type entityType)
|
public TSelect AsType(Type entityType)
|
||||||
{
|
{
|
||||||
if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("ISelect"));
|
if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("ISelect"));
|
||||||
if (entityType == _tables[0].Table.Type) return this as TSelect;
|
if (entityType == _tables[0].Table.Type) return this as TSelect;
|
||||||
var newtb = _commonUtils.GetTableByEntity(entityType);
|
var newtb = _commonUtils.GetTableByEntity(entityType);
|
||||||
_tables[0].Table = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("ISelect"));
|
_tables[0].Table = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("ISelect"));
|
||||||
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
||||||
return this as TSelect;
|
return this as TSelect;
|
||||||
}
|
}
|
||||||
@@ -1067,15 +1067,15 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
case DynamicFilterOperator.Custom:
|
case DynamicFilterOperator.Custom:
|
||||||
var fiValueCustomArray = fi.Field?.ToString().Split(new[] { ' ' }, 2);
|
var fiValueCustomArray = fi.Field?.ToString().Split(new[] { ' ' }, 2);
|
||||||
if (fiValueCustomArray.Length != 2) throw new ArgumentException(CoreStrings.CustomFieldSeparatedBySpaces);
|
if (fiValueCustomArray.Length != 2) throw new ArgumentException(CoreErrorStrings.CustomFieldSeparatedBySpaces);
|
||||||
if (string.IsNullOrWhiteSpace(fiValueCustomArray[0])) throw new ArgumentException(CoreStrings.Custom_StaticMethodName_IsNotNull);
|
if (string.IsNullOrWhiteSpace(fiValueCustomArray[0])) throw new ArgumentException(CoreErrorStrings.Custom_StaticMethodName_IsNotNull);
|
||||||
if (string.IsNullOrWhiteSpace(fiValueCustomArray[1])) throw new ArgumentException(CoreStrings.Custom_Reflection_IsNotNull);
|
if (string.IsNullOrWhiteSpace(fiValueCustomArray[1])) throw new ArgumentException(CoreErrorStrings.Custom_Reflection_IsNotNull);
|
||||||
var fiValue1Type = Type.GetType(fiValueCustomArray[1]);
|
var fiValue1Type = Type.GetType(fiValueCustomArray[1]);
|
||||||
if (fiValue1Type == null) throw new ArgumentException(CoreStrings.NotFound_Reflection(fiValueCustomArray[1]));
|
if (fiValue1Type == null) throw new ArgumentException(CoreErrorStrings.NotFound_Reflection(fiValueCustomArray[1]));
|
||||||
var fiValue0Method = fiValue1Type.GetMethod(fiValueCustomArray[0], new Type[] { typeof(string) });
|
var fiValue0Method = fiValue1Type.GetMethod(fiValueCustomArray[0], new Type[] { typeof(string) });
|
||||||
if (fiValue0Method == null) fiValue0Method = fiValue1Type.GetMethod(fiValueCustomArray[0], new Type[] { typeof(object), typeof(string) });
|
if (fiValue0Method == null) fiValue0Method = fiValue1Type.GetMethod(fiValueCustomArray[0], new Type[] { typeof(object), typeof(string) });
|
||||||
if (fiValue0Method == null) throw new ArgumentException(CoreStrings.NotFound_Static_MethodName(fiValueCustomArray[0]));
|
if (fiValue0Method == null) throw new ArgumentException(CoreErrorStrings.NotFound_Static_MethodName(fiValueCustomArray[0]));
|
||||||
if (MethodIsDynamicFilterCustomAttribute(fiValue0Method) == false) throw new ArgumentException(CoreStrings.Custom_StaticMethodName_NotSet_DynamicFilterCustom(fiValueCustomArray[0]));
|
if (MethodIsDynamicFilterCustomAttribute(fiValue0Method) == false) throw new ArgumentException(CoreErrorStrings.Custom_StaticMethodName_NotSet_DynamicFilterCustom(fiValueCustomArray[0]));
|
||||||
var fiValue0MethodReturn = fiValue0Method?.Invoke(null, fiValue0Method.GetParameters()
|
var fiValue0MethodReturn = fiValue0Method?.Invoke(null, fiValue0Method.GetParameters()
|
||||||
.Select(a => a.ParameterType == typeof(object) ? (object)this :
|
.Select(a => a.ParameterType == typeof(object) ? (object)this :
|
||||||
(a.ParameterType == typeof(string) ? (object)(fi.Value?.ToString()) : (object)null))
|
(a.ParameterType == typeof(string) ? (object)(fi.Value?.ToString()) : (object)null))
|
||||||
@@ -1126,20 +1126,20 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
case DynamicFilterOperator.LessThanOrEqual: exp = Expression.Call(typeof(SqlExt).GetMethod("LessThanOrEqual").MakeGenericMethod(exp.Type), exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fi.Value?.ToString()), exp.Type)); break;
|
case DynamicFilterOperator.LessThanOrEqual: exp = Expression.Call(typeof(SqlExt).GetMethod("LessThanOrEqual").MakeGenericMethod(exp.Type), exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fi.Value?.ToString()), exp.Type)); break;
|
||||||
case DynamicFilterOperator.Range:
|
case DynamicFilterOperator.Range:
|
||||||
var fiValueRangeArray = getFiListValue();
|
var fiValueRangeArray = getFiListValue();
|
||||||
if (fiValueRangeArray.Length != 2) throw new ArgumentException(CoreStrings.Range_Comma_Separateda_By2Char);
|
if (fiValueRangeArray.Length != 2) throw new ArgumentException(CoreErrorStrings.Range_Comma_Separateda_By2Char);
|
||||||
exp = Expression.AndAlso(
|
exp = Expression.AndAlso(
|
||||||
Expression.GreaterThanOrEqual(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fiValueRangeArray[0]), exp.Type)),
|
Expression.GreaterThanOrEqual(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fiValueRangeArray[0]), exp.Type)),
|
||||||
Expression.LessThan(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fiValueRangeArray[1]), exp.Type)));
|
Expression.LessThan(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fiValueRangeArray[1]), exp.Type)));
|
||||||
break;
|
break;
|
||||||
case DynamicFilterOperator.DateRange:
|
case DynamicFilterOperator.DateRange:
|
||||||
var fiValueDateRangeArray = getFiListValue();
|
var fiValueDateRangeArray = getFiListValue();
|
||||||
if (fiValueDateRangeArray?.Length != 2) throw new ArgumentException(CoreStrings.DateRange_Comma_Separateda_By2Char);
|
if (fiValueDateRangeArray?.Length != 2) throw new ArgumentException(CoreErrorStrings.DateRange_Comma_Separateda_By2Char);
|
||||||
if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse(fiValueDateRangeArray[1]).AddDays(1).ToString("yyyy-MM-dd HH:mm:ss");
|
if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse(fiValueDateRangeArray[1]).AddDays(1).ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}-01").AddMonths(1).ToString("yyyy-MM-dd HH:mm:ss");
|
else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}-01").AddMonths(1).ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}-01-01").AddYears(1).ToString("yyyy-MM-dd HH:mm:ss");
|
else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}-01-01").AddYears(1).ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d? \d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}:00:00").AddHours(1).ToString("yyyy-MM-dd HH:mm:ss");
|
else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d? \d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}:00:00").AddHours(1).ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d? \d\d?:\d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}:00").AddMinutes(1).ToString("yyyy-MM-dd HH:mm:ss");
|
else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d? \d\d?:\d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}:00").AddMinutes(1).ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
else if (!Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d? \d\d?:\d\d?:\d\d?$")) throw new ArgumentException(CoreStrings.DateRange_DateFormat_yyyy);
|
else if (!Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d? \d\d?:\d\d?:\d\d?$")) throw new ArgumentException(CoreErrorStrings.DateRange_DateFormat_yyyy);
|
||||||
|
|
||||||
if (Regex.IsMatch(fiValueDateRangeArray[0], @"^\d\d\d\d[\-/]\d\d?$")) fiValueDateRangeArray[0] = DateTime.Parse($"{fiValueDateRangeArray[0]}-01").ToString("yyyy-MM-dd HH:mm:ss");
|
if (Regex.IsMatch(fiValueDateRangeArray[0], @"^\d\d\d\d[\-/]\d\d?$")) fiValueDateRangeArray[0] = DateTime.Parse($"{fiValueDateRangeArray[0]}-01").ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
else if (Regex.IsMatch(fiValueDateRangeArray[0], @"^\d\d\d\d$")) fiValueDateRangeArray[0] = DateTime.Parse($"{fiValueDateRangeArray[0]}-01-01").ToString("yyyy-MM-dd HH:mm:ss");
|
else if (Regex.IsMatch(fiValueDateRangeArray[0], @"^\d\d\d\d$")) fiValueDateRangeArray[0] = DateTime.Parse($"{fiValueDateRangeArray[0]}-01-01").ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
@@ -1274,7 +1274,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
if (_transaction == null && _orm.Ado.TransactionCurrentThread != null) this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
if (_transaction == null && _orm.Ado.TransactionCurrentThread != null) this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
||||||
if (_transaction == null && _resolveHookTransaction != null) this.WithTransaction(_resolveHookTransaction());
|
if (_transaction == null && _resolveHookTransaction != null) this.WithTransaction(_resolveHookTransaction());
|
||||||
if (_transaction == null) throw new Exception($"{CoreStrings.Begin_Transaction_Then_ForUpdate}");
|
if (_transaction == null) throw new Exception($"{CoreErrorStrings.Begin_Transaction_Then_ForUpdate}");
|
||||||
switch (_orm.Ado.DataType)
|
switch (_orm.Ado.DataType)
|
||||||
{
|
{
|
||||||
case DataType.MySql:
|
case DataType.MySql:
|
||||||
@@ -1291,6 +1291,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
case DataType.OdbcPostgreSQL:
|
case DataType.OdbcPostgreSQL:
|
||||||
case DataType.CustomPostgreSQL:
|
case DataType.CustomPostgreSQL:
|
||||||
case DataType.KingbaseES:
|
case DataType.KingbaseES:
|
||||||
|
case DataType.Xugu:
|
||||||
_tosqlAppendContent = $"{_tosqlAppendContent} for update{(noawait ? " nowait" : "")}";
|
_tosqlAppendContent = $"{_tosqlAppendContent} for update{(noawait ? " nowait" : "")}";
|
||||||
break;
|
break;
|
||||||
case DataType.Oracle:
|
case DataType.Oracle:
|
||||||
|
|||||||
@@ -21,13 +21,13 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
public DataTable ToDataTableByPropertyName(string[] properties)
|
public DataTable ToDataTableByPropertyName(string[] properties)
|
||||||
{
|
{
|
||||||
if (properties?.Any() != true) throw new ArgumentException($"{CoreStrings.Properties_Cannot_Null}");
|
if (properties?.Any() != true) throw new ArgumentException($"{CoreErrorStrings.Properties_Cannot_Null}");
|
||||||
var sbfield = new StringBuilder();
|
var sbfield = new StringBuilder();
|
||||||
for (var propIdx = 0; propIdx < properties.Length; propIdx++)
|
for (var propIdx = 0; propIdx < properties.Length; propIdx++)
|
||||||
{
|
{
|
||||||
var property = properties[propIdx];
|
var property = properties[propIdx];
|
||||||
var exp = ConvertStringPropertyToExpression(property);
|
var exp = ConvertStringPropertyToExpression(property);
|
||||||
if (exp == null) throw new Exception(CoreStrings.Property_Cannot_Find(property));
|
if (exp == null) throw new Exception(CoreErrorStrings.Property_Cannot_Find(property));
|
||||||
var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery);
|
var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery);
|
||||||
if (propIdx > 0) sbfield.Append(", ");
|
if (propIdx > 0) sbfield.Append(", ");
|
||||||
sbfield.Append(field);
|
sbfield.Append(field);
|
||||||
@@ -236,7 +236,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
public void ToChunk(int size, Action<FetchCallbackArgs<List<T1>>> done, bool includeNestedMembers = false)
|
public void ToChunk(int size, Action<FetchCallbackArgs<List<T1>>> done, bool includeNestedMembers = false)
|
||||||
{
|
{
|
||||||
if (_selectExpression != null) throw new ArgumentException(CoreStrings.Before_Chunk_Cannot_Use_Select);
|
if (_selectExpression != null) throw new ArgumentException(CoreErrorStrings.Before_Chunk_Cannot_Use_Select);
|
||||||
this.ToListChunkPrivate(size, done, includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null);
|
this.ToListChunkPrivate(size, done, includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -859,7 +859,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
protected TSelect InternalJoin<T2>(Expression exp, SelectTableInfoType joinType)
|
protected TSelect InternalJoin<T2>(Expression exp, SelectTableInfoType joinType)
|
||||||
{
|
{
|
||||||
var tb = _commonUtils.GetTableByEntity(typeof(T2));
|
var tb = _commonUtils.GetTableByEntity(typeof(T2));
|
||||||
if (tb == null) throw new ArgumentException(CoreStrings.T2_Type_Error);
|
if (tb == null) throw new ArgumentException(CoreErrorStrings.T2_Type_Error);
|
||||||
_tables.Add(new SelectTableInfo { Table = tb, Alias = $"IJ{_tables.Count}", On = null, Type = joinType });
|
_tables.Add(new SelectTableInfo { Table = tb, Alias = $"IJ{_tables.Count}", On = null, Type = joinType });
|
||||||
_commonExpression.ExpressionJoinLambda(_tables, _tableRule, joinType, exp, _diymemexpWithTempQuery, _whereGlobalFilter);
|
_commonExpression.ExpressionJoinLambda(_tables, _tableRule, joinType, exp, _diymemexpWithTempQuery, _whereGlobalFilter);
|
||||||
return this as TSelect;
|
return this as TSelect;
|
||||||
@@ -990,7 +990,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
protected string InternalGetInsertIntoToSql<TTargetEntity>(string tableName, Expression select)
|
protected string InternalGetInsertIntoToSql<TTargetEntity>(string tableName, Expression select)
|
||||||
{
|
{
|
||||||
var tb = _orm.CodeFirst.GetTableByEntity(typeof(TTargetEntity));
|
var tb = _orm.CodeFirst.GetTableByEntity(typeof(TTargetEntity));
|
||||||
if (tb == null) throw new ArgumentException(CoreStrings.InsertInto_TypeError(typeof(TTargetEntity).DisplayCsharp()));
|
if (tb == null) throw new ArgumentException(CoreErrorStrings.InsertInto_TypeError(typeof(TTargetEntity).DisplayCsharp()));
|
||||||
if (string.IsNullOrEmpty(tableName)) tableName = tb.DbName;
|
if (string.IsNullOrEmpty(tableName)) tableName = tb.DbName;
|
||||||
if (_orm.CodeFirst.IsSyncStructureToLower) tableName = tableName.ToLower();
|
if (_orm.CodeFirst.IsSyncStructureToLower) tableName = tableName.ToLower();
|
||||||
if (_orm.CodeFirst.IsSyncStructureToUpper) tableName = tableName.ToUpper();
|
if (_orm.CodeFirst.IsSyncStructureToUpper) tableName = tableName.ToUpper();
|
||||||
@@ -1003,7 +1003,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, null, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
|
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, null, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
|
||||||
|
|
||||||
var childs = map.Childs;
|
var childs = map.Childs;
|
||||||
if (childs.Any() == false) throw new ArgumentException(CoreStrings.InsertInto_No_Property_Selected(typeof(TTargetEntity).DisplayCsharp()));
|
if (childs.Any() == false) throw new ArgumentException(CoreErrorStrings.InsertInto_No_Property_Selected(typeof(TTargetEntity).DisplayCsharp()));
|
||||||
foreach (var col in tb.Columns.Values)
|
foreach (var col in tb.Columns.Values)
|
||||||
{
|
{
|
||||||
if (col.Attribute.IsIdentity && string.IsNullOrEmpty(col.DbInsertValue)) continue;
|
if (col.Attribute.IsIdentity && string.IsNullOrEmpty(col.DbInsertValue)) continue;
|
||||||
@@ -1101,13 +1101,13 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
#else
|
#else
|
||||||
public Task<DataTable> ToDataTableByPropertyNameAsync(string[] properties, CancellationToken cancellationToken)
|
public Task<DataTable> ToDataTableByPropertyNameAsync(string[] properties, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
if (properties?.Any() != true) throw new ArgumentException($"{CoreStrings.Properties_Cannot_Null}");
|
if (properties?.Any() != true) throw new ArgumentException($"{CoreErrorStrings.Properties_Cannot_Null}");
|
||||||
var sbfield = new StringBuilder();
|
var sbfield = new StringBuilder();
|
||||||
for (var propIdx = 0; propIdx < properties.Length; propIdx++)
|
for (var propIdx = 0; propIdx < properties.Length; propIdx++)
|
||||||
{
|
{
|
||||||
var property = properties[propIdx];
|
var property = properties[propIdx];
|
||||||
var exp = ConvertStringPropertyToExpression(property);
|
var exp = ConvertStringPropertyToExpression(property);
|
||||||
if (exp == null) throw new Exception(CoreStrings.Property_Cannot_Find(property));
|
if (exp == null) throw new Exception(CoreErrorStrings.Property_Cannot_Find(property));
|
||||||
var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery);
|
var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery);
|
||||||
if (propIdx > 0) sbfield.Append(", ");
|
if (propIdx > 0) sbfield.Append(", ");
|
||||||
sbfield.Append(field);
|
sbfield.Append(field);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
for (var a = 1; a < lambdaExp.Parameters.Count; a++)
|
for (var a = 1; a < lambdaExp.Parameters.Count; a++)
|
||||||
{
|
{
|
||||||
var tb = _commonUtils.GetTableByEntity(lambdaExp.Parameters[a].Type);
|
var tb = _commonUtils.GetTableByEntity(lambdaExp.Parameters[a].Type);
|
||||||
if (tb == null) throw new ArgumentException(CoreStrings.Type_Error_Name(lambdaExp.Parameters[a].Name));
|
if (tb == null) throw new ArgumentException(CoreErrorStrings.Type_Error_Name(lambdaExp.Parameters[a].Name));
|
||||||
_tables.Add(new SelectTableInfo { Table = tb, Alias = lambdaExp.Parameters[a].Name, On = null, Type = SelectTableInfoType.From });
|
_tables.Add(new SelectTableInfo { Table = tb, Alias = lambdaExp.Parameters[a].Name, On = null, Type = SelectTableInfoType.From });
|
||||||
}
|
}
|
||||||
var exp = lambdaExp.Body;
|
var exp = lambdaExp.Body;
|
||||||
@@ -79,7 +79,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
case "LeftJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.LeftJoin); break;
|
case "LeftJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.LeftJoin); break;
|
||||||
case "InnerJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.InnerJoin); break;
|
case "InnerJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.InnerJoin); break;
|
||||||
case "RightJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.RightJoin); break;
|
case "RightJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.RightJoin); break;
|
||||||
default: throw new NotImplementedException(CoreStrings.Not_Implemented_Name(expCall.Method.Name));
|
default: throw new NotImplementedException(CoreErrorStrings.Not_Implemented_Name(expCall.Method.Name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -210,9 +210,66 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
var ret = From<T2, T3, T4, T5>();
|
var ret = From<T2, T3, T4, T5>();
|
||||||
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider });
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider });
|
||||||
}
|
}
|
||||||
|
public ISelect<T1, T2, T3, T4, T5, T6> FromQuery<T2, T3, T4, T5, T6>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class
|
||||||
|
{
|
||||||
|
var ret = From<T2, T3, T4, T5, T6>();
|
||||||
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider });
|
||||||
|
}
|
||||||
|
public ISelect<T1, T2, T3, T4, T5, T6, T7> FromQuery<T2, T3, T4, T5, T6, T7>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class
|
||||||
|
{
|
||||||
|
var ret = From<T2, T3, T4, T5, T6, T7>();
|
||||||
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider });
|
||||||
|
}
|
||||||
|
public ISelect<T1, T2, T3, T4, T5, T6, T7, T8> FromQuery<T2, T3, T4, T5, T6, T7, T8>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class
|
||||||
|
{
|
||||||
|
var ret = From<T2, T3, T4, T5, T6, T7, T8>();
|
||||||
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider });
|
||||||
|
}
|
||||||
|
public ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class
|
||||||
|
{
|
||||||
|
var ret = From<T2, T3, T4, T5, T6, T7, T8, T9>();
|
||||||
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider });
|
||||||
|
}
|
||||||
|
public ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class
|
||||||
|
{
|
||||||
|
var ret = From<T2, T3, T4, T5, T6, T7, T8, T9, T10>();
|
||||||
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider });
|
||||||
|
}
|
||||||
|
public ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class
|
||||||
|
{
|
||||||
|
var ret = From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>();
|
||||||
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider });
|
||||||
|
}
|
||||||
|
public ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11, ISelect<T12> select12) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class
|
||||||
|
{
|
||||||
|
var ret = From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>();
|
||||||
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider, select12 as Select0Provider });
|
||||||
|
}
|
||||||
|
public ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11, ISelect<T12> select12, ISelect<T13> select13) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class
|
||||||
|
{
|
||||||
|
var ret = From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>();
|
||||||
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider, select12 as Select0Provider, select13 as Select0Provider });
|
||||||
|
}
|
||||||
|
public ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11, ISelect<T12> select12, ISelect<T13> select13, ISelect<T14> select14) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class
|
||||||
|
{
|
||||||
|
var ret = From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>();
|
||||||
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider, select12 as Select0Provider, select13 as Select0Provider, select14 as Select0Provider });
|
||||||
|
}
|
||||||
|
public ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11, ISelect<T12> select12, ISelect<T13> select13, ISelect<T14> select14, ISelect<T15> select15) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class
|
||||||
|
{
|
||||||
|
var ret = From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>();
|
||||||
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14), typeof(T15) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider, select12 as Select0Provider, select13 as Select0Provider, select14 as Select0Provider, select15 as Select0Provider });
|
||||||
|
}
|
||||||
|
public ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> FromQuery<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(ISelect<T2> select2, ISelect<T3> select3, ISelect<T4> select4, ISelect<T5> select5, ISelect<T6> select6, ISelect<T7> select7, ISelect<T8> select8, ISelect<T9> select9, ISelect<T10> select10, ISelect<T11> select11, ISelect<T12> select12, ISelect<T13> select13, ISelect<T14> select14, ISelect<T15> select15, ISelect<T16> select16) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class
|
||||||
|
{
|
||||||
|
var ret = From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>();
|
||||||
|
return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14), typeof(T15), typeof(T16) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider, select12 as Select0Provider, select13 as Select0Provider, select14 as Select0Provider, select15 as Select0Provider, select16 as Select0Provider });
|
||||||
|
}
|
||||||
|
|
||||||
public ISelect<T1> UnionAll(params ISelect<T1>[] querys)
|
public ISelect<T1> UnionAll(params ISelect<T1>[] querys)
|
||||||
{
|
{
|
||||||
|
querys = querys?.Where(q => q != null).ToArray();
|
||||||
|
if (querys?.Any() != true) return this;
|
||||||
var ret = (_orm as BaseDbProvider).CreateSelectProvider<T1>(null) as Select1Provider<T1>;
|
var ret = (_orm as BaseDbProvider).CreateSelectProvider<T1>(null) as Select1Provider<T1>;
|
||||||
var sb = new StringBuilder().Append(LocalGetQuerySql(this));
|
var sb = new StringBuilder().Append(LocalGetQuerySql(this));
|
||||||
foreach (var select2 in querys)
|
foreach (var select2 in querys)
|
||||||
@@ -523,16 +580,76 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject(sql, parms));
|
if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject(sql, parms));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public ISelect<T1> WithMemory(IEnumerable<T1> source)
|
public ISelect<TDto> WithMemory<TDto>(IEnumerable<TDto> source)
|
||||||
{
|
{
|
||||||
var list = source?.Select(a => (object)a).ToList();
|
var list = source?.Select(a => (object)a).ToList();
|
||||||
if (list.Any() != true) throw new Exception(CoreStrings.Cannot_Be_NULL_Name(nameof(source)));
|
if (list.Any() != true) throw new Exception(CoreErrorStrings.Cannot_Be_NULL_Name(nameof(source)));
|
||||||
var sb = new StringBuilder();
|
if (_tables[0].Table.Type != typeof(TDto))
|
||||||
(_orm.InsertOrUpdate<object>().AsType(_tables[0].Table.Type) as InsertOrUpdateProvider<object>)
|
{
|
||||||
.WriteSourceSelectUnionAll(list, sb, _params, true);
|
if (_orm.CodeFirst.IsAutoSyncStructure)
|
||||||
|
(_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TDto)); //._dicSyced.TryAdd(typeof(TReturn), true);
|
||||||
|
var ret = (_orm as BaseDbProvider).CreateSelectProvider<TDto>(null) as Select1Provider<TDto>;
|
||||||
|
ret._commandTimeout = _commandTimeout;
|
||||||
|
ret._connection = _connection;
|
||||||
|
ret._transaction = _transaction;
|
||||||
|
ret._whereGlobalFilter = new List<GlobalFilter.Item>(_whereGlobalFilter.ToArray());
|
||||||
|
ret._cancel = _cancel;
|
||||||
|
ret._params.AddRange(_params);
|
||||||
|
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 { return WithSql(sb.ToString()); }
|
try
|
||||||
finally { sb.Clear(); }
|
{
|
||||||
|
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);
|
public ISelect<TDto> WithTempQuery<TDto>(Expression<Func<T1, TDto>> selector) => InternalWithTempQuery<TDto>(selector);
|
||||||
@@ -561,13 +678,13 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
public ISelect<T1> IncludeByPropertyName(string property, Expression<Action<ISelect<object>>> then)
|
public ISelect<T1> IncludeByPropertyName(string property, Expression<Action<ISelect<object>>> then)
|
||||||
{
|
{
|
||||||
var exp = ConvertStringPropertyToExpression(property, true);
|
var exp = ConvertStringPropertyToExpression(property, true);
|
||||||
if (exp == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}");
|
if (exp == null) throw new ArgumentException($"{CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))}");
|
||||||
var memExp = exp as MemberExpression;
|
var memExp = exp as MemberExpression;
|
||||||
if (memExp == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}2");
|
if (memExp == null) throw new ArgumentException($"{CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))}2");
|
||||||
var parTb = _commonUtils.GetTableByEntity(memExp.Expression.Type);
|
var parTb = _commonUtils.GetTableByEntity(memExp.Expression.Type);
|
||||||
if (parTb == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}3");
|
if (parTb == null) throw new ArgumentException($"{CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))}3");
|
||||||
var parTbref = parTb.GetTableRef(memExp.Member.Name, true, true);
|
var parTbref = parTb.GetTableRef(memExp.Member.Name, true, true);
|
||||||
if (parTbref == null) throw new ArgumentException(CoreStrings.Not_Valid_Navigation_Property(nameof(property)));
|
if (parTbref == null) throw new ArgumentException(CoreErrorStrings.Not_Valid_Navigation_Property(nameof(property)));
|
||||||
switch (parTbref.RefType)
|
switch (parTbref.RefType)
|
||||||
{
|
{
|
||||||
case TableRefType.ManyToMany:
|
case TableRefType.ManyToMany:
|
||||||
@@ -582,7 +699,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
var navigateSelector = Expression.Lambda(funcType, exp, _tables[0].Parameter);
|
var navigateSelector = Expression.Lambda(funcType, exp, _tables[0].Parameter);
|
||||||
var incMethod = this.GetType().GetMethod("IncludeMany");
|
var incMethod = this.GetType().GetMethod("IncludeMany");
|
||||||
if (incMethod == null) throw new Exception(CoreStrings.RunTimeError_Reflection_IncludeMany);
|
if (incMethod == null) throw new Exception(CoreErrorStrings.RunTimeError_Reflection_IncludeMany);
|
||||||
Delegate newthen = null;
|
Delegate newthen = null;
|
||||||
if (then != null)
|
if (then != null)
|
||||||
{
|
{
|
||||||
@@ -646,10 +763,10 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
var expBody = navigateSelector?.Body;
|
var expBody = navigateSelector?.Body;
|
||||||
if (expBody == null) return this;
|
if (expBody == null) return this;
|
||||||
if (expBody.NodeType != ExpressionType.MemberAccess) throw new Exception(CoreStrings.Include_ParameterType_Error_Use_MemberAccess);
|
if (expBody.NodeType != ExpressionType.MemberAccess) throw new Exception(CoreErrorStrings.Include_ParameterType_Error_Use_MemberAccess);
|
||||||
if (typeof(IEnumerable).IsAssignableFrom(expBody.Type)) throw new Exception(CoreStrings.Include_ParameterType_Error_Use_IncludeMany);
|
if (typeof(IEnumerable).IsAssignableFrom(expBody.Type)) throw new Exception(CoreErrorStrings.Include_ParameterType_Error_Use_IncludeMany);
|
||||||
var tb = _commonUtils.GetTableByEntity(expBody.Type);
|
var tb = _commonUtils.GetTableByEntity(expBody.Type);
|
||||||
if (tb == null) throw new Exception(CoreStrings.Include_ParameterType_Error);
|
if (tb == null) throw new Exception(CoreErrorStrings.Include_ParameterType_Error);
|
||||||
|
|
||||||
_isIncluded = true;
|
_isIncluded = true;
|
||||||
_tables[0].Parameter = navigateSelector.Parameters[0];
|
_tables[0].Parameter = navigateSelector.Parameters[0];
|
||||||
@@ -684,19 +801,19 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
isbreak = true;
|
isbreak = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
throw new Exception(CoreStrings.Expression_Error_Use_Successive_MemberAccess_Type(exp));
|
throw new Exception(CoreErrorStrings.Expression_Error_Use_Successive_MemberAccess_Type(exp));
|
||||||
default:
|
default:
|
||||||
throw new Exception(CoreStrings.Expression_Error_Use_Successive_MemberAccess_Type(exp));
|
throw new Exception(CoreErrorStrings.Expression_Error_Use_Successive_MemberAccess_Type(exp));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (param == null) throw new Exception(CoreStrings.Expression_Error_Use_ParameterExpression(exp));
|
if (param == null) throw new Exception(CoreErrorStrings.Expression_Error_Use_ParameterExpression(exp));
|
||||||
return NativeTuple.Create(param, members.ToList());
|
return NativeTuple.Create(param, members.ToList());
|
||||||
}
|
}
|
||||||
static MethodInfo GetEntityValueWithPropertyNameMethod = typeof(EntityUtilExtensions).GetMethod("GetEntityValueWithPropertyName");
|
static MethodInfo GetEntityValueWithPropertyNameMethod = typeof(EntityUtilExtensions).GetMethod("GetEntityValueWithPropertyName");
|
||||||
static ConcurrentDictionary<Type, ConcurrentDictionary<string, MethodInfo>> _dicTypeMethod = new ConcurrentDictionary<Type, ConcurrentDictionary<string, MethodInfo>>();
|
static ConcurrentDictionary<Type, ConcurrentDictionary<string, MethodInfo>> _dicTypeMethod = new ConcurrentDictionary<Type, ConcurrentDictionary<string, MethodInfo>>();
|
||||||
public ISelect<T1> IncludeMany<TNavigate>(Expression<Func<T1, IEnumerable<TNavigate>>> navigateSelector, Action<ISelect<TNavigate>> then = null) where TNavigate : class
|
public ISelect<T1> IncludeMany<TNavigate>(Expression<Func<T1, IEnumerable<TNavigate>>> navigateSelector, Action<ISelect<TNavigate>> then = null) where TNavigate : class
|
||||||
{
|
{
|
||||||
var throwNavigateSelector = new Exception(CoreStrings.IncludeMany_ParameterType_Error_Use_MemberAccess);
|
var throwNavigateSelector = new Exception(CoreErrorStrings.IncludeMany_ParameterType_Error_Use_MemberAccess);
|
||||||
|
|
||||||
var expBody = navigateSelector?.Body;
|
var expBody = navigateSelector?.Body;
|
||||||
if (expBody == null) return this;
|
if (expBody == null) return this;
|
||||||
@@ -706,7 +823,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
Expression<Func<TNavigate, TNavigate>> selectExp = null;
|
Expression<Func<TNavigate, TNavigate>> selectExp = null;
|
||||||
while (expBody.NodeType == ExpressionType.Call)
|
while (expBody.NodeType == ExpressionType.Call)
|
||||||
{
|
{
|
||||||
throwNavigateSelector = new Exception(CoreStrings.IncludeMany_ParameterTypeError(nameof(navigateSelector)));
|
throwNavigateSelector = new Exception(CoreErrorStrings.IncludeMany_ParameterTypeError(nameof(navigateSelector)));
|
||||||
var callExp = (expBody as MethodCallExpression);
|
var callExp = (expBody as MethodCallExpression);
|
||||||
switch (callExp.Method.Name)
|
switch (callExp.Method.Name)
|
||||||
{
|
{
|
||||||
@@ -718,7 +835,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
break;
|
break;
|
||||||
case "Select":
|
case "Select":
|
||||||
selectExp = (callExp.Arguments[1] as Expression<Func<TNavigate, TNavigate>>);
|
selectExp = (callExp.Arguments[1] as Expression<Func<TNavigate, TNavigate>>);
|
||||||
if (selectExp?.Parameters.Count != 1) throw new Exception(CoreStrings.IncludeMany_ParameterError_OnlyUseOneParameter(nameof(navigateSelector)));
|
if (selectExp?.Parameters.Count != 1) throw new Exception(CoreErrorStrings.IncludeMany_ParameterError_OnlyUseOneParameter(nameof(navigateSelector)));
|
||||||
break;
|
break;
|
||||||
default: throw throwNavigateSelector;
|
default: throw throwNavigateSelector;
|
||||||
}
|
}
|
||||||
@@ -734,9 +851,9 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (tb == null) throw throwNavigateSelector;
|
if (tb == null) throw throwNavigateSelector;
|
||||||
var collMemElementType = (collMem.Type.IsGenericType ? collMem.Type.GetGenericArguments().FirstOrDefault() : collMem.Type.GetElementType());
|
var collMemElementType = (collMem.Type.IsGenericType ? collMem.Type.GetGenericArguments().FirstOrDefault() : collMem.Type.GetElementType());
|
||||||
if (typeof(TNavigate) != collMemElementType)
|
if (typeof(TNavigate) != collMemElementType)
|
||||||
throw new Exception(CoreStrings.IncludeMany_ParameterError_Select_ReturnConsistentType(nameof(navigateSelector), collMemElementType));
|
throw new Exception(CoreErrorStrings.IncludeMany_ParameterError_Select_ReturnConsistentType(nameof(navigateSelector), collMemElementType));
|
||||||
var tbNav = _commonUtils.GetTableByEntity(typeof(TNavigate));
|
var tbNav = _commonUtils.GetTableByEntity(typeof(TNavigate));
|
||||||
if (tbNav == null) throw new Exception(CoreStrings.TypeError_CannotUse_IncludeMany(typeof(TNavigate).FullName));
|
if (tbNav == null) throw new Exception(CoreErrorStrings.TypeError_CannotUse_IncludeMany(typeof(TNavigate).FullName));
|
||||||
|
|
||||||
if (collMem.Expression.NodeType != ExpressionType.Parameter)
|
if (collMem.Expression.NodeType != ExpressionType.Parameter)
|
||||||
_commonExpression.ExpressionWhereLambda(_tables, _tableRule, Expression.MakeMemberAccess(collMem.Expression, tb.Properties[tb.ColumnsByCs.First().Value.CsName]), _diymemexpWithTempQuery, null, null);
|
_commonExpression.ExpressionWhereLambda(_tables, _tableRule, Expression.MakeMemberAccess(collMem.Expression, tb.Properties[tb.ColumnsByCs.First().Value.CsName]), _diymemexpWithTempQuery, null, null);
|
||||||
@@ -746,7 +863,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (whereExp == null)
|
if (whereExp == null)
|
||||||
{
|
{
|
||||||
tbref = tb.GetTableRef(collMem.Member.Name, true, true);
|
tbref = tb.GetTableRef(collMem.Member.Name, true, true);
|
||||||
if (tbref == null) throw new Exception(CoreStrings.IncludeMany_NotValid_Navigation(tb.Type.DisplayCsharp(), collMem.Member.Name));
|
if (tbref == null) throw new Exception(CoreErrorStrings.IncludeMany_NotValid_Navigation(tb.Type.DisplayCsharp(), collMem.Member.Name));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
public string InternalToSql(string field)
|
public string InternalToSql(string field)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(field))
|
if (string.IsNullOrEmpty(field))
|
||||||
throw new ArgumentException(CoreStrings.Parameter_Field_NotSpecified);
|
throw new ArgumentException(CoreErrorStrings.Parameter_Field_NotSpecified);
|
||||||
|
|
||||||
var isNestedPageSql = false;
|
var isNestedPageSql = false;
|
||||||
switch (_orm.Ado.DataType)
|
switch (_orm.Ado.DataType)
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
case DataType.KingbaseES:
|
case DataType.KingbaseES:
|
||||||
case DataType.ShenTong:
|
case DataType.ShenTong:
|
||||||
case DataType.DuckDB:
|
case DataType.DuckDB:
|
||||||
|
case DataType.Xugu:
|
||||||
InterceptPostgreSQL?.Invoke(); break;
|
InterceptPostgreSQL?.Invoke(); break;
|
||||||
case DataType.Oracle:
|
case DataType.Oracle:
|
||||||
case DataType.OdbcOracle:
|
case DataType.OdbcOracle:
|
||||||
@@ -216,6 +217,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
case DataType.CustomPostgreSQL:
|
case DataType.CustomPostgreSQL:
|
||||||
case DataType.KingbaseES:
|
case DataType.KingbaseES:
|
||||||
case DataType.ShenTong:
|
case DataType.ShenTong:
|
||||||
|
case DataType.Xugu:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
var tbalias = _query2Provider._tables.Where(tb => tb.Table == col.Table).FirstOrDefault()?.Alias ?? _query2Provider._tables[0].Alias;
|
var tbalias = _query2Provider._tables.Where(tb => tb.Table == col.Table).FirstOrDefault()?.Alias ?? _query2Provider._tables[0].Alias;
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
var ctor = typeof(UpdateJoinProvider<,>).MakeGenericType(typeof(T1), typeof(T2))
|
var ctor = typeof(UpdateJoinProvider<,>).MakeGenericType(typeof(T1), typeof(T2))
|
||||||
.GetConstructor(new[] { typeof(IUpdate<T1>), typeof(ISelect<T2>), typeof(Expression<Func<T1, T2, bool>>) });
|
.GetConstructor(new[] { typeof(IUpdate<T1>), typeof(ISelect<T2>), typeof(Expression<Func<T1, T2, bool>>) });
|
||||||
if (ctor == null) throw new Exception(CoreStrings.Type_Cannot_Access_Constructor("UpdateJoinProvider<>"));
|
if (ctor == null) throw new Exception(CoreErrorStrings.Type_Cannot_Access_Constructor("UpdateJoinProvider<>"));
|
||||||
return ctor.Invoke(new object[] { this, query, on }) as IUpdateJoin<T1, T2>;
|
return ctor.Invoke(new object[] { this, query, on }) as IUpdateJoin<T1, T2>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,7 +271,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (_versionColumn != null && _source.Count > 0)
|
if (_versionColumn != null && _source.Count > 0)
|
||||||
{
|
{
|
||||||
if (affrows != _source.Count)
|
if (affrows != _source.Count)
|
||||||
throw new DbUpdateVersionException(CoreStrings.DbUpdateVersionException_RowLevelOptimisticLock(_source.Count, affrows), _table, sql, dbParms, affrows, _source.Select(a => (object)a));
|
throw new DbUpdateVersionException(CoreErrorStrings.DbUpdateVersionException_RowLevelOptimisticLock(_source.Count, affrows), _table, sql, dbParms, affrows, _source.Select(a => (object)a));
|
||||||
foreach (var d in _source)
|
foreach (var d in _source)
|
||||||
{
|
{
|
||||||
if (d is Dictionary<string, object> dict)
|
if (d is Dictionary<string, object> dict)
|
||||||
@@ -381,7 +381,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction);
|
if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction);
|
||||||
using (var conn = _orm.Ado.MasterPool.Get())
|
using (var conn = _orm.Ado.MasterPool.Get())
|
||||||
{
|
{
|
||||||
_transaction = conn.Value.BeginTransaction();
|
_transaction = conn.Value.BeginTransaction();
|
||||||
@@ -396,12 +396,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
execute();
|
execute();
|
||||||
}
|
}
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_transaction.Rollback();
|
_transaction.Rollback();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
_transaction = null;
|
_transaction = null;
|
||||||
@@ -537,7 +537,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (orm.Aop.AuditValueHandler == null) return;
|
if (orm.Aop.AuditValueHandler == null) return;
|
||||||
if (data == null || table == null) return;
|
if (data == null || table == null) return;
|
||||||
if (typeof(T1) == typeof(object) && new[] { table.Type, table.TypeLazy }.Contains(data.GetType()) == false)
|
if (typeof(T1) == typeof(object) && new[] { table.Type, table.TypeLazy }.Contains(data.GetType()) == false)
|
||||||
throw new Exception(CoreStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp()));
|
throw new Exception(CoreErrorStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp()));
|
||||||
foreach (var col in table.Columns.Values)
|
foreach (var col in table.Columns.Values)
|
||||||
{
|
{
|
||||||
object val = col.GetValue(data);
|
object val = col.GetValue(data);
|
||||||
@@ -692,7 +692,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (initAssignExp == null) continue;
|
if (initAssignExp == null) continue;
|
||||||
var memberName = initExp.Bindings[a].Member.Name;
|
var memberName = initExp.Bindings[a].Member.Name;
|
||||||
if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue;
|
if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue;
|
||||||
if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception(CoreStrings.NotFound_Property(memberName));
|
if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception(CoreErrorStrings.NotFound_Property(memberName));
|
||||||
var memberValue = _commonExpression.ExpressionLambdaToSql(initAssignExp.Expression, new CommonExpression.ExpTSC
|
var memberValue = _commonExpression.ExpressionLambdaToSql(initAssignExp.Expression, new CommonExpression.ExpTSC
|
||||||
{
|
{
|
||||||
isQuoteName = true,
|
isQuoteName = true,
|
||||||
@@ -710,7 +710,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
var memberName = newExp.Members[a].Name;
|
var memberName = newExp.Members[a].Name;
|
||||||
if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue;
|
if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue;
|
||||||
if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception(CoreStrings.NotFound_Property(memberName));
|
if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception(CoreErrorStrings.NotFound_Property(memberName));
|
||||||
var memberValue = _commonExpression.ExpressionLambdaToSql(newExp.Arguments[a], new CommonExpression.ExpTSC
|
var memberValue = _commonExpression.ExpressionLambdaToSql(newExp.Arguments[a], new CommonExpression.ExpTSC
|
||||||
{
|
{
|
||||||
isQuoteName = true,
|
isQuoteName = true,
|
||||||
@@ -831,7 +831,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
protected string WhereCaseSource(string CsName, Func<string, string> thenValue)
|
protected string WhereCaseSource(string CsName, Func<string, string> thenValue)
|
||||||
{
|
{
|
||||||
if (_source.Any() == false) return null;
|
if (_source.Any() == false) return null;
|
||||||
if (_table.ColumnsByCs.ContainsKey(CsName) == false) throw new Exception(CoreStrings.NotFound_CsName_Column(CsName));
|
if (_table.ColumnsByCs.ContainsKey(CsName) == false) throw new Exception(CoreErrorStrings.NotFound_CsName_Column(CsName));
|
||||||
if (thenValue == null) throw new ArgumentNullException(nameof(thenValue));
|
if (thenValue == null) throw new ArgumentNullException(nameof(thenValue));
|
||||||
|
|
||||||
if (_source.Count == 0) return null;
|
if (_source.Count == 0) return null;
|
||||||
@@ -928,10 +928,10 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
public IUpdate<T1> AsType(Type entityType)
|
public IUpdate<T1> AsType(Type entityType)
|
||||||
{
|
{
|
||||||
if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("IUpdate"));
|
if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("IUpdate"));
|
||||||
if (entityType == _table.Type) return this;
|
if (entityType == _table.Type) return this;
|
||||||
var newtb = _commonUtils.GetTableByEntity(entityType);
|
var newtb = _commonUtils.GetTableByEntity(entityType);
|
||||||
_table = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("IUpdate"));
|
_table = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("IUpdate"));
|
||||||
_tempPrimarys = _table.Primarys;
|
_tempPrimarys = _table.Primarys;
|
||||||
_versionColumn = _ignoreVersion ? null : _table.VersionColumn;
|
_versionColumn = _ignoreVersion ? null : _table.VersionColumn;
|
||||||
if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType);
|
||||||
@@ -1197,6 +1197,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
case DataType.CustomPostgreSQL:
|
case DataType.CustomPostgreSQL:
|
||||||
case DataType.KingbaseES:
|
case DataType.KingbaseES:
|
||||||
case DataType.ShenTong:
|
case DataType.ShenTong:
|
||||||
|
case DataType.Xugu:
|
||||||
vcvalue = $"{_tableAlias}.{vcname}"; //set name = b.name
|
vcvalue = $"{_tableAlias}.{vcname}"; //set name = b.name
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -1228,7 +1229,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
sb.Append(" \r\nWHERE ");
|
sb.Append(" \r\nWHERE ");
|
||||||
if (_source.Any())
|
if (_source.Any())
|
||||||
{
|
{
|
||||||
if (_tempPrimarys.Any() == false) throw new ArgumentException(CoreStrings.NoPrimaryKey_UseSetDto(_table.Type.DisplayCsharp()));
|
if (_tempPrimarys.Any() == false) throw new ArgumentException(CoreErrorStrings.NoPrimaryKey_UseSetDto(_table.Type.DisplayCsharp()));
|
||||||
sb.Append('(').Append(_commonUtils.WhereItems(_tempPrimarys, "", _source, _paramsSource)).Append(')');
|
sb.Append('(').Append(_commonUtils.WhereItems(_tempPrimarys, "", _source, _paramsSource)).Append(')');
|
||||||
andTimes++;
|
andTimes++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction);
|
if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction);
|
||||||
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
||||||
{
|
{
|
||||||
_transaction = conn.Value.BeginTransaction();
|
_transaction = conn.Value.BeginTransaction();
|
||||||
@@ -65,12 +65,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
await executeAsync();
|
await executeAsync();
|
||||||
}
|
}
|
||||||
_transaction.Commit();
|
_transaction.Commit();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_transaction.Rollback();
|
_transaction.Rollback();
|
||||||
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex));
|
_orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
_transaction = null;
|
_transaction = null;
|
||||||
|
|||||||
@@ -540,7 +540,6 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
if (dywhere is IEnumerable)
|
if (dywhere is IEnumerable)
|
||||||
{
|
{
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
var ie = dywhere as IEnumerable;
|
var ie = dywhere as IEnumerable;
|
||||||
var ieSingle = LocalGetSingleElement(ie);
|
var ieSingle = LocalGetSingleElement(ie);
|
||||||
|
|||||||
2033
FreeSql/Internal/Exception/CoreErrorStrings.cs
Normal file
2033
FreeSql/Internal/Exception/CoreErrorStrings.cs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -113,7 +113,7 @@ namespace FreeSql.Internal
|
|||||||
else colattr.IsIgnore = true;
|
else colattr.IsIgnore = true;
|
||||||
//Navigate 错误提示
|
//Navigate 错误提示
|
||||||
var pnvAttr = common.GetEntityNavigateAttribute(trytb.Type, p);
|
var pnvAttr = common.GetEntityNavigateAttribute(trytb.Type, p);
|
||||||
if (pnvAttr != null) throw new Exception(CoreStrings.Navigation_Missing_SetProperty(trytb.Type.DisplayCsharp(), p.Name));
|
if (pnvAttr != null) throw new Exception(CoreErrorStrings.Navigation_Missing_SetProperty(trytb.Type.DisplayCsharp(), p.Name));
|
||||||
}
|
}
|
||||||
if (tp == null && colattr?.IsIgnore != true)
|
if (tp == null && colattr?.IsIgnore != true)
|
||||||
{
|
{
|
||||||
@@ -153,7 +153,7 @@ namespace FreeSql.Internal
|
|||||||
StringBuilder cscode = null;
|
StringBuilder cscode = null;
|
||||||
if (common.CodeFirst.IsLazyLoading && propsLazy.Any())
|
if (common.CodeFirst.IsLazyLoading && propsLazy.Any())
|
||||||
{
|
{
|
||||||
if (trytb.Type.IsPublic == false && trytb.Type.IsNestedPublic == false) throw new Exception(CoreStrings.LazyLoading_EntityMustDeclarePublic(trytbTypeName));
|
if (trytb.Type.IsPublic == false && trytb.Type.IsNestedPublic == false) throw new Exception(CoreErrorStrings.LazyLoading_EntityMustDeclarePublic(trytbTypeName));
|
||||||
|
|
||||||
trytbTypeLazyName = $"FreeSqlLazyEntity__{Regex.Replace(trytbTypeName, @"[^\w\d]", "_")}";
|
trytbTypeLazyName = $"FreeSqlLazyEntity__{Regex.Replace(trytbTypeName, @"[^\w\d]", "_")}";
|
||||||
|
|
||||||
@@ -179,14 +179,14 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
cscode.AppendLine("}");
|
cscode.AppendLine("}");
|
||||||
Assembly assembly = null;
|
Assembly assembly = null;
|
||||||
if (MethodLazyLoadingComplier.Value == null) throw new Exception(CoreStrings.Install_FreeSql_Extensions_LazyLoading);
|
if (MethodLazyLoadingComplier.Value == null) throw new Exception(CoreErrorStrings.Install_FreeSql_Extensions_LazyLoading);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
assembly = MethodLazyLoadingComplier.Value.Invoke(null, new object[] { cscode.ToString() }) as Assembly;
|
assembly = MethodLazyLoadingComplier.Value.Invoke(null, new object[] { cscode.ToString() }) as Assembly;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
throw new Exception(CoreStrings.LazyLoading_CompilationError(trytbTypeName, ex.Message, cscode));
|
throw new Exception(CoreErrorStrings.LazyLoading_CompilationError(trytbTypeName, ex.Message, cscode));
|
||||||
}
|
}
|
||||||
var type = assembly.GetExportedTypes()/*.DefinedTypes*/.Where(a => a.FullName.EndsWith(trytbTypeLazyName)).FirstOrDefault();
|
var type = assembly.GetExportedTypes()/*.DefinedTypes*/.Where(a => a.FullName.EndsWith(trytbTypeLazyName)).FirstOrDefault();
|
||||||
trytb.TypeLazy = type;
|
trytb.TypeLazy = type;
|
||||||
@@ -313,7 +313,8 @@ namespace FreeSql.Internal
|
|||||||
if (colType == typeof(int) || colType == typeof(uint))
|
if (colType == typeof(int) || colType == typeof(uint))
|
||||||
colattr.DbType = "SERIAL";
|
colattr.DbType = "SERIAL";
|
||||||
else if (colType == typeof(long) || colType == typeof(ulong))
|
else if (colType == typeof(long) || colType == typeof(ulong))
|
||||||
colattr.DbType = "SERIAL8";
|
colattr.DbType = colattr.DbType.IndexOf("BIGSERIAL", StringComparison.OrdinalIgnoreCase) != -1 ?
|
||||||
|
"BIGSERIAL" : "SERIAL8"; //#1919
|
||||||
}
|
}
|
||||||
if (colattr.MapType.NullableTypeOrThis() == typeof(DateTime))
|
if (colattr.MapType.NullableTypeOrThis() == typeof(DateTime))
|
||||||
{
|
{
|
||||||
@@ -396,6 +397,7 @@ namespace FreeSql.Internal
|
|||||||
case DataType.CustomPostgreSQL:
|
case DataType.CustomPostgreSQL:
|
||||||
case DataType.KingbaseES:
|
case DataType.KingbaseES:
|
||||||
case DataType.ShenTong:
|
case DataType.ShenTong:
|
||||||
|
case DataType.Xugu:
|
||||||
if (strlen < 0) colattr.DbType = $"TEXT{strNotNull}";
|
if (strlen < 0) colattr.DbType = $"TEXT{strNotNull}";
|
||||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPattern, m =>
|
else colattr.DbType = Regex.Replace(colattr.DbType, charPattern, m =>
|
||||||
replaceCounter++ == 0 ? $"{m.Groups[1].Value}({strlen})" : m.Groups[0].Value);
|
replaceCounter++ == 0 ? $"{m.Groups[1].Value}({strlen})" : m.Groups[0].Value);
|
||||||
@@ -473,7 +475,8 @@ namespace FreeSql.Internal
|
|||||||
case DataType.CustomPostgreSQL:
|
case DataType.CustomPostgreSQL:
|
||||||
case DataType.KingbaseES:
|
case DataType.KingbaseES:
|
||||||
case DataType.ShenTong: //驱动引发的异常:“System.Data.OscarClient.OscarException”(位于 System.Data.OscarClient.dll 中)
|
case DataType.ShenTong: //驱动引发的异常:“System.Data.OscarClient.OscarException”(位于 System.Data.OscarClient.dll 中)
|
||||||
colattr.DbType = $"BYTEA{strNotNull}"; //变长二进制串
|
case DataType.Xugu:
|
||||||
|
colattr.DbType = $"BYTEA{strNotNull}"; //变长二进制串
|
||||||
break;
|
break;
|
||||||
case DataType.Oracle:
|
case DataType.Oracle:
|
||||||
case DataType.OdbcOracle:
|
case DataType.OdbcOracle:
|
||||||
@@ -507,8 +510,8 @@ namespace FreeSql.Internal
|
|||||||
colattr.DbType = Regex.Replace(colattr.DbType, decimalPatten, $"$1({colattr.Precision},{colattr.Scale})");
|
colattr.DbType = Regex.Replace(colattr.DbType, decimalPatten, $"$1({colattr.Precision},{colattr.Scale})");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trytb.Columns.ContainsKey(colattr.Name)) throw new Exception(CoreStrings.Duplicate_ColumnAttribute(colattr.Name));
|
if (trytb.Columns.ContainsKey(colattr.Name)) throw new Exception(CoreErrorStrings.Duplicate_ColumnAttribute(colattr.Name));
|
||||||
if (trytb.ColumnsByCs.ContainsKey(csName)) throw new Exception(CoreStrings.Duplicate_PropertyName(csName));
|
if (trytb.ColumnsByCs.ContainsKey(csName)) throw new Exception(CoreErrorStrings.Duplicate_PropertyName(csName));
|
||||||
|
|
||||||
return col;
|
return col;
|
||||||
}
|
}
|
||||||
@@ -519,7 +522,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
if (trytb.VersionColumn.Attribute.MapType.IsNullableType() ||
|
if (trytb.VersionColumn.Attribute.MapType.IsNullableType() ||
|
||||||
trytb.VersionColumn.Attribute.MapType.IsNumberType() == false && !new[] { typeof(byte[]), typeof(string) }.Contains(trytb.VersionColumn.Attribute.MapType))
|
trytb.VersionColumn.Attribute.MapType.IsNumberType() == false && !new[] { typeof(byte[]), typeof(string) }.Contains(trytb.VersionColumn.Attribute.MapType))
|
||||||
throw new Exception(CoreStrings.Properties_AsRowLock_Must_Numeric_Byte(trytb.VersionColumn.CsName));
|
throw new Exception(CoreErrorStrings.Properties_AsRowLock_Must_Numeric_Byte(trytb.VersionColumn.CsName));
|
||||||
}
|
}
|
||||||
tbattr?.ParseAsTable(trytb);
|
tbattr?.ParseAsTable(trytb);
|
||||||
|
|
||||||
@@ -804,7 +807,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
if (locTb.ColumnsByCs.TryGetValue(bi, out var trybindcol) == false)
|
if (locTb.ColumnsByCs.TryGetValue(bi, out var trybindcol) == false)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, locFindTypeName, bi));
|
nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, locFindTypeName, bi));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
@@ -824,7 +827,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
if (bindColumnsTempPrimary[a].CsType.NullableTypeOrThis() != bindColumns[a].CsType.NullableTypeOrThis())
|
if (bindColumnsTempPrimary[a].CsType.NullableTypeOrThis() != bindColumns[a].CsType.NullableTypeOrThis())
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.OneToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, bindColumnsTempPrimary[a].CsName, tbref.CsName, bindColumns[a].CsName));
|
nvref.Exception = new Exception(CoreErrorStrings.OneToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, bindColumnsTempPrimary[a].CsName, tbref.CsName, bindColumns[a].CsName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
@@ -856,7 +859,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
if (bindColumns[a].CsType.NullableTypeOrThis() != bindColumnsTempPrimary[a].CsType.NullableTypeOrThis())
|
if (bindColumns[a].CsType.NullableTypeOrThis() != bindColumnsTempPrimary[a].CsType.NullableTypeOrThis())
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, bindColumns[a].CsName, tbref.CsName, bindColumnsTempPrimary[a].CsName));
|
nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, bindColumns[a].CsName, tbref.CsName, bindColumnsTempPrimary[a].CsName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
@@ -887,7 +890,7 @@ namespace FreeSql.Internal
|
|||||||
if (typeof(IEnumerable).IsAssignableFrom(pnv.PropertyType) == false) return;
|
if (typeof(IEnumerable).IsAssignableFrom(pnv.PropertyType) == false) return;
|
||||||
if (trytb.Primarys.Any() == false)
|
if (trytb.Primarys.Any() == false)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_EntityMissingPrimaryKey(trytbTypeName, pnv.Name, trytbTypeName));
|
nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_EntityMissingPrimaryKey(trytbTypeName, pnv.Name, trytbTypeName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
return;
|
return;
|
||||||
@@ -920,7 +923,7 @@ namespace FreeSql.Internal
|
|||||||
|
|
||||||
if (isManyToMany == false)
|
if (isManyToMany == false)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_EntityMustHas_NavigateCollection(trytbTypeName, pnv.Name, tbrefTypeName));
|
nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_EntityMustHas_NavigateCollection(trytbTypeName, pnv.Name, tbrefTypeName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
return;
|
return;
|
||||||
@@ -943,7 +946,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
if (tbref.Primarys.Any() == false)
|
if (tbref.Primarys.Any() == false)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_EntityMissing_PrimaryKey(trytbTypeName, pnv.Name, tbrefTypeName));
|
nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_EntityMissing_PrimaryKey(trytbTypeName, pnv.Name, tbrefTypeName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
return;
|
return;
|
||||||
@@ -1014,7 +1017,7 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_IntermediateClass_ErrorMessage(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, ex.Message));
|
nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_IntermediateClass_ErrorMessage(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, ex.Message));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
}
|
}
|
||||||
@@ -1022,7 +1025,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
if (trytbTf.RefType != TableRefType.ManyToOne && trytbTf.RefType != TableRefType.OneToOne)
|
if (trytbTf.RefType != TableRefType.ManyToOne && trytbTf.RefType != TableRefType.OneToOne)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name));
|
nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
}
|
}
|
||||||
@@ -1061,7 +1064,7 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_IntermediateClass_ErrorMessage(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTbref.Name, ex.Message));
|
nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_IntermediateClass_ErrorMessage(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTbref.Name, ex.Message));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
}
|
}
|
||||||
@@ -1069,7 +1072,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
if (tbrefTf.RefType != TableRefType.ManyToOne && tbrefTf.RefType != TableRefType.OneToOne)
|
if (tbrefTf.RefType != TableRefType.ManyToOne && tbrefTf.RefType != TableRefType.OneToOne)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTbref.Name));
|
nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTbref.Name));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
}
|
}
|
||||||
@@ -1107,14 +1110,14 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
if (trycol != null && trycol.CsType.NullableTypeOrThis() != trytb.Primarys[a].CsType.NullableTypeOrThis())
|
if (trycol != null && trycol.CsType.NullableTypeOrThis() != trytb.Primarys[a].CsType.NullableTypeOrThis())
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, tbmid.CsName, trycol.CsName, trytb.CsName, trytb.Primarys[a].CsName));
|
nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, tbmid.CsName, trycol.CsName, trytb.CsName, trytb.Primarys[a].CsName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (trycol == null)
|
if (trycol == null)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.ManyToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, findtrytbPkCsName));
|
nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, findtrytbPkCsName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
@@ -1147,14 +1150,14 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
if (trycol != null && trycol.CsType.NullableTypeOrThis() != tbref.Primarys[a].CsType.NullableTypeOrThis())
|
if (trycol != null && trycol.CsType.NullableTypeOrThis() != tbref.Primarys[a].CsType.NullableTypeOrThis())
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, tbmid.CsName, trycol.CsName, trytb.CsName, trytb.Primarys[a].CsName));
|
nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, tbmid.CsName, trycol.CsName, trytb.CsName, trytb.Primarys[a].CsName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (trycol == null)
|
if (trycol == null)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.ManyToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, findtbrefPkCsName));
|
nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, findtbrefPkCsName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
@@ -1360,7 +1363,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
if (tbref.ColumnsByCs.TryGetValue(bi, out var trybindcol) == false)
|
if (tbref.ColumnsByCs.TryGetValue(bi, out var trybindcol) == false)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, tbrefTypeName, bi));
|
nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, tbrefTypeName, bi));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
@@ -1374,7 +1377,7 @@ namespace FreeSql.Internal
|
|||||||
|
|
||||||
if (nvref.Exception == null && bindColumns.Any() && bindColumns.Count != trytb.Primarys.Length)
|
if (nvref.Exception == null && bindColumns.Any() && bindColumns.Count != trytb.Primarys.Length)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.Navigation_Bind_Number_Different(trytbTypeName, pnv.Name, bindColumns.Count, trytb.Primarys.Length));
|
nvref.Exception = new Exception(CoreErrorStrings.Navigation_Bind_Number_Different(trytbTypeName, pnv.Name, bindColumns.Count, trytb.Primarys.Length));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
}
|
}
|
||||||
@@ -1414,15 +1417,15 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
if (trycol != null && trycol.CsType.NullableTypeOrThis() != trytb.Primarys[a].CsType.NullableTypeOrThis())
|
if (trycol != null && trycol.CsType.NullableTypeOrThis() != trytb.Primarys[a].CsType.NullableTypeOrThis())
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.OneToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, trytb.Primarys[a].CsName, tbref.CsName, trycol.CsName));
|
nvref.Exception = new Exception(CoreErrorStrings.OneToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, trytb.Primarys[a].CsName, tbref.CsName, trycol.CsName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (trycol == null)
|
if (trycol == null)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.OneToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbref.CsName, findtrytb, findtrytbPkCsName)
|
nvref.Exception = new Exception(CoreErrorStrings.OneToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbref.CsName, findtrytb, findtrytbPkCsName)
|
||||||
+ (refprop == null ? "" : CoreStrings.OneToMany_UseNavigate(refprop.Name, findtrytbPkCsName)));
|
+ (refprop == null ? "" : CoreErrorStrings.OneToMany_UseNavigate(refprop.Name, findtrytbPkCsName)));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
@@ -1466,7 +1469,7 @@ namespace FreeSql.Internal
|
|||||||
if (tbref == null) return;
|
if (tbref == null) return;
|
||||||
if (tbref.Primarys.Any() == false)
|
if (tbref.Primarys.Any() == false)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_EntityMissingPrimaryKey(trytbTypeName, pnv.Name, propTypeName));
|
nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_EntityMissingPrimaryKey(trytbTypeName, pnv.Name, propTypeName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
}
|
}
|
||||||
@@ -1483,7 +1486,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
if (trytb.ColumnsByCs.TryGetValue(bi, out var trybindcol) == false)
|
if (trytb.ColumnsByCs.TryGetValue(bi, out var trybindcol) == false)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, trytbTypeName, bi));
|
nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, trytbTypeName, bi));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
@@ -1495,7 +1498,7 @@ namespace FreeSql.Internal
|
|||||||
|
|
||||||
if (nvref.Exception == null && bindColumns.Any() && bindColumns.Count != tbref.Primarys.Length)
|
if (nvref.Exception == null && bindColumns.Any() && bindColumns.Count != tbref.Primarys.Length)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.Navigation_Bind_Number_Different(trytbTypeName, pnv.Name, bindColumns.Count, tbref.Primarys.Length));
|
nvref.Exception = new Exception(CoreErrorStrings.Navigation_Bind_Number_Different(trytbTypeName, pnv.Name, bindColumns.Count, tbref.Primarys.Length));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
}
|
}
|
||||||
@@ -1550,14 +1553,14 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
if (trycol != null && trycol.CsType.NullableTypeOrThis() != tbref.Primarys[a].CsType.NullableTypeOrThis())
|
if (trycol != null && trycol.CsType.NullableTypeOrThis() != tbref.Primarys[a].CsType.NullableTypeOrThis())
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, trycol.CsName, tbref.CsName, tbref.Primarys[a].CsName));
|
nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, trycol.CsName, tbref.CsName, tbref.Primarys[a].CsName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (trycol == null)
|
if (trycol == null)
|
||||||
{
|
{
|
||||||
nvref.Exception = new Exception(CoreStrings.Navigation_NotFound_CorrespondingField(trytbTypeName, pnv.Name, findtbrefPkCsName));
|
nvref.Exception = new Exception(CoreErrorStrings.Navigation_NotFound_CorrespondingField(trytbTypeName, pnv.Name, findtbrefPkCsName));
|
||||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||||
//if (isLazy) throw nvref.Exception;
|
//if (isLazy) throw nvref.Exception;
|
||||||
break;
|
break;
|
||||||
@@ -2125,7 +2128,7 @@ namespace FreeSql.Internal
|
|||||||
var parmValue = Expression.Parameter(typeof(object), "value");
|
var parmValue = Expression.Parameter(typeof(object), "value");
|
||||||
Expression exp = Expression.Convert(parmInfo, typeObj);
|
Expression exp = Expression.Convert(parmInfo, typeObj);
|
||||||
foreach (var pro in memberAccessPath.Split('.'))
|
foreach (var pro in memberAccessPath.Split('.'))
|
||||||
exp = Expression.PropertyOrField(exp, pro) ?? throw new Exception(string.Concat(exp.Type.FullName, CoreStrings.NoProperty_Defined, pro));
|
exp = Expression.PropertyOrField(exp, pro) ?? throw new Exception(string.Concat(exp.Type.FullName, CoreErrorStrings.NoProperty_Defined, pro));
|
||||||
|
|
||||||
var value2 = Expression.Call(MethodGetDataReaderValue, Expression.Constant(exp.Type), parmValue);
|
var value2 = Expression.Call(MethodGetDataReaderValue, Expression.Constant(exp.Type), parmValue);
|
||||||
var value3 = Expression.Convert(parmValue, typeValue);
|
var value3 = Expression.Convert(parmValue, typeValue);
|
||||||
@@ -2765,7 +2768,7 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
throw new ArgumentException(CoreStrings.ExpressionTree_Convert_Type_Error(string.Concat(value), value.GetType().FullName, type.FullName, ex.Message));
|
throw new ArgumentException(CoreErrorStrings.ExpressionTree_Convert_Type_Error(string.Concat(value), value.GetType().FullName, type.FullName, ex.Message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static string GetCsName(string name)
|
public static string GetCsName(string name)
|
||||||
|
|||||||
1243
FreeSql/Properties/CoreStrings.Designer.cs
generated
1243
FreeSql/Properties/CoreStrings.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
@@ -1,5 +0,0 @@
|
|||||||
<#
|
|
||||||
Session["ResourceFile"] = "CoreStrings.resx";
|
|
||||||
Session["AccessModifier"] = "public";
|
|
||||||
#>
|
|
||||||
<#@ include file="Resources.tt" #>
|
|
||||||
@@ -1,603 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<data name="AsTable_PropertyName_FormatError" xml:space="preserve">
|
|
||||||
<value>FreeSql: [Table(AsTable="{asTable}")] Property value formatted incorrectly</value>
|
|
||||||
</data>
|
|
||||||
<data name="AsTable_PropertyName_NotDateTime" xml:space="preserve">
|
|
||||||
<value>FreeSql: The property name {atmGroupsValue} set by [Table (AsTable = xx)] is not of type DateTime</value>
|
|
||||||
</data>
|
|
||||||
<data name="Available_Failed_Get_Resource" xml:space="preserve">
|
|
||||||
<value>FreeSql: {name}: Failed to get resource {statistics}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Available_Thrown_Exception" xml:space="preserve">
|
|
||||||
<value>FreeSql: {name}: An exception needs to be thrown</value>
|
|
||||||
</data>
|
|
||||||
<data name="Bad_Expression_Format" xml:space="preserve">
|
|
||||||
<value>FreeSql: Wrong expression format {column}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Before_Chunk_Cannot_Use_Select" xml:space="preserve">
|
|
||||||
<value>FreeSql: Select is not available until the Chunk function</value>
|
|
||||||
</data>
|
|
||||||
<data name="Begin_Transaction_Then_ForUpdate" xml:space="preserve">
|
|
||||||
<value>FreeSql: For security reasons, be sure to use ForUpdate after the transaction is open</value>
|
|
||||||
</data>
|
|
||||||
<data name="Cannot_Be_NULL" xml:space="preserve">
|
|
||||||
<value>FreeSql: Cannot be null</value>
|
|
||||||
</data>
|
|
||||||
<data name="Cannot_Be_NULL_Name" xml:space="preserve">
|
|
||||||
<value>FreeSql: {name} cannot be null</value>
|
|
||||||
</data>
|
|
||||||
<data name="Cannot_Match_Property" xml:space="preserve">
|
|
||||||
<value>FreeSql: Unable to match {property}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Cannot_Resolve_ExpressionTree" xml:space="preserve">
|
|
||||||
<value>FreeSql: {property} cannot be resolved to an expression tree</value>
|
|
||||||
</data>
|
|
||||||
<data name="Check_UseConnectionString" xml:space="preserve">
|
|
||||||
<value>FreeSql: The parameter master ConnectionString cannot be empty, check UseConnectionString</value>
|
|
||||||
</data>
|
|
||||||
<data name="Commit" xml:space="preserve">
|
|
||||||
<value>FreeSql: Commit</value>
|
|
||||||
</data>
|
|
||||||
<data name="Connection_Failed_Switch_Servers" xml:space="preserve">
|
|
||||||
<value>FreeSql: Connection failed, ready to switch other available servers</value>
|
|
||||||
</data>
|
|
||||||
<data name="Custom_Expression_ParsingError" xml:space="preserve">
|
|
||||||
<value>FreeSql: Custom expression parsing error: type {exp3MethodDeclaringType} needs to define static ThreadLocal<ExpressionCallContext>field, field, field (important three reminders)</value>
|
|
||||||
</data>
|
|
||||||
<data name="Custom_Reflection_IsNotNull" xml:space="preserve">
|
|
||||||
<value>FreeSql: Custom {Reflection Information} cannot be empty, format: {static method name}{space}{reflection information}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Custom_StaticMethodName_IsNotNull" xml:space="preserve">
|
|
||||||
<value>FreeSql: Custom {static method name} cannot be empty, format: {static method name}{space}{reflection information}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Custom_StaticMethodName_NotSet_DynamicFilterCustom" xml:space="preserve">
|
|
||||||
<value>FreeSql: Custom corresponding {{static method name}}:{fiValueCustomArray} The [DynamicFilterCustomAttribute] attribute is not set</value>
|
|
||||||
</data>
|
|
||||||
<data name="CustomFieldSeparatedBySpaces" xml:space="preserve">
|
|
||||||
<value>FreeSql: Custom requires that Fields be space-split and 2-length in the format: {static method name}{space}{reflection information}</value>
|
|
||||||
</data>
|
|
||||||
<data name="DataType_AsType_Inconsistent" xml:space="preserve">
|
|
||||||
<value>FreeSql: The data type of the operation ({dataDisplayCsharp}) is inconsistent with AsType ({tableTypeDisplayCsharp}). Please check.</value>
|
|
||||||
</data>
|
|
||||||
<data name="DateRange_Comma_Separateda_By2Char" xml:space="preserve">
|
|
||||||
<value>FreeSql: DateRange requires that Value be comma-separated and 2-length</value>
|
|
||||||
</data>
|
|
||||||
<data name="DateRange_DateFormat_yyyy" xml:space="preserve">
|
|
||||||
<value>FreeSql: DateRange requires that the Value [1] format must be: yyyy, yyyy-MM, yyyy-MM-dd, yyyyy-MM-dd HH, yyyy, yyyy-MM-dd HH:mm</value>
|
|
||||||
</data>
|
|
||||||
<data name="DbUpdateVersionException_RowLevelOptimisticLock" xml:space="preserve">
|
|
||||||
<value>FreeSql: The record may not exist, or the row level optimistic lock version is out of date, the number of updates {sourceCount}, the number of rows affected {affrows}.</value>
|
|
||||||
</data>
|
|
||||||
<data name="Different_Number_SlaveConnectionString_SlaveWeights" xml:space="preserve">
|
|
||||||
<value>FreeSql: The number of SlaveConnectionStrings is not the same as SlaveWeights</value>
|
|
||||||
</data>
|
|
||||||
<data name="Duplicate_ColumnAttribute" xml:space="preserve">
|
|
||||||
<value>FreeSql: ColumnAttribute. Name {colattrName} exists repeatedly, please check (note: case insensitive)</value>
|
|
||||||
</data>
|
|
||||||
<data name="Duplicate_PropertyName" xml:space="preserve">
|
|
||||||
<value>FreeSql: Property name {pName} exists repeatedly, please check (note: case insensitive)</value>
|
|
||||||
</data>
|
|
||||||
<data name="Entity_Must_Primary_Key" xml:space="preserve">
|
|
||||||
<value>FreeSql: The {function} feature requires that the entity class {tableCsName} must have a primary key</value>
|
|
||||||
</data>
|
|
||||||
<data name="Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys" xml:space="preserve">
|
|
||||||
<value>FreeSql: {tbTypeFullName} is a parent-child relationship, but combinations of multiple primary keys are not supported in versions below MySql 8.0</value>
|
|
||||||
</data>
|
|
||||||
<data name="Entity_NotParentChild_Relationship" xml:space="preserve">
|
|
||||||
<value>FreeSql: {tbTypeFullName} is not a parent-child relationship and cannot be used</value>
|
|
||||||
</data>
|
|
||||||
<data name="EspeciallySubquery_Cannot_Parsing" xml:space="preserve">
|
|
||||||
<value>FreeSql: This particular subquery cannot be resolved</value>
|
|
||||||
</data>
|
|
||||||
<data name="Expression_Error_Use_ParameterExpression" xml:space="preserve">
|
|
||||||
<value>FreeSql: Expression error, its top object is not ParameterExpression:{exp}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Expression_Error_Use_Successive_MemberAccess_Type" xml:space="preserve">
|
|
||||||
<value>FreeSql: Expression error, it is not a continuous MemberAccess type: {exp}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ExpressionTree_Convert_Type_Error" xml:space="preserve">
|
|
||||||
<value>FreeSql: ExpressionTree conversion type error, value ({value}), type ({valueTypeFullName}), target type ({typeFullName}), Error:{exMessage}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Failed_SubTable_FieldValue" xml:space="preserve">
|
|
||||||
<value>FreeSql: Failed to parse table field value {sqlWhere}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Functions_AsTable_NotImplemented" xml:space="preserve">
|
|
||||||
<value>FreeSql: Function {asTable} not implemented by AsTable</value>
|
|
||||||
</data>
|
|
||||||
<data name="GBase_NotSupport_OtherThanCommas" xml:space="preserve">
|
|
||||||
<value>FreeSql: GBase does not support separators other than commas at this time</value>
|
|
||||||
</data>
|
|
||||||
<data name="Generated_Same_SubTable" xml:space="preserve">
|
|
||||||
<value>FreeSql: TableName:{tableName} generated the same table name</value>
|
|
||||||
</data>
|
|
||||||
<data name="GetPrimarys_ParameterError_IsNotDictKey " xml:space="preserve">
|
|
||||||
<value>FreeSql: The parameter'{primary}'passed by GetPrimarys is incorrect and does not belong to the key name of the dictionary data</value>
|
|
||||||
</data>
|
|
||||||
<data name="Has_Specified_Cannot_Specified_Second" xml:space="preserve">
|
|
||||||
<value>FreeSql: {first} has already been specified and {second} can no longer be specified</value>
|
|
||||||
</data>
|
|
||||||
<data name="Ignored_Check_Confirm_PublicGetSet" xml:space="preserve">
|
|
||||||
<value>FreeSql: {tb2DbName}. {mp2MemberName} is ignored. Check the IsIgnore setting to make sure get/set is public</value>
|
|
||||||
</data>
|
|
||||||
<data name="Include_ParameterType_Error" xml:space="preserve">
|
|
||||||
<value>FreeSql: Include parameter type error</value>
|
|
||||||
</data>
|
|
||||||
<data name="Include_ParameterType_Error_Use_IncludeMany" xml:space="preserve">
|
|
||||||
<value>FreeSql: Include parameter type is wrong, use IncludeMany for collection properties</value>
|
|
||||||
</data>
|
|
||||||
<data name="Include_ParameterType_Error_Use_MemberAccess" xml:space="preserve">
|
|
||||||
<value>FreeSql: Include parameter type is wrong, expression type should be MemberAccess</value>
|
|
||||||
</data>
|
|
||||||
<data name="IncludeMany_NotValid_Navigation" xml:space="preserve">
|
|
||||||
<value>FreeSql: The property {collMemMemberName} of IncludeMany type {tbTypeDisplayCsharp} is not a valid navigation property, hint: IsIgnore = true will not be a navigation property</value>
|
|
||||||
</data>
|
|
||||||
<data name="IncludeMany_ParameterError_OnlyUseOneParameter" xml:space="preserve">
|
|
||||||
<value>FreeSql: IncludeMany {navigateSelector} parameter is wrong, Select can only use one parameter's method, the correct format:.Select(t =>new TNavigate{{}})</value>
|
|
||||||
</data>
|
|
||||||
<data name="IncludeMany_ParameterError_Select_ReturnConsistentType" xml:space="preserve">
|
|
||||||
<value>FreeSql: IncludeMany {navigateSelector} parameter error, Select lambda parameter return value must match {collMemElementType} type</value>
|
|
||||||
</data>
|
|
||||||
<data name="IncludeMany_ParameterType_Error_Use_MemberAccess" xml:space="preserve">
|
|
||||||
<value>FreeSql: IncludeMany parameter 1 has wrong type, expression type should be MemberAccess</value>
|
|
||||||
</data>
|
|
||||||
<data name="IncludeMany_ParameterTypeError" xml:space="preserve">
|
|
||||||
<value>FreeSql: IncludeMany {navigateSelector} parameter type is wrong, correct format: a.collections.Take(1).Where(c => C.A ID == a.id).Select (a => new TNavigate{{}})</value>
|
|
||||||
</data>
|
|
||||||
<data name="InsertInto_No_Property_Selected" xml:space="preserve">
|
|
||||||
<value>FreeSql: ISelect. InsertInto() did not select an attribute: {displayCsharp}</value>
|
|
||||||
</data>
|
|
||||||
<data name="InsertInto_TypeError" xml:space="preserve">
|
|
||||||
<value>FreeSql: ISelect. InsertInto() type error: {displayCsharp}</value>
|
|
||||||
</data>
|
|
||||||
<data name="InsertOrUpdate_Must_Primary_Key" xml:space="preserve">
|
|
||||||
<value>FreeSql: The InsertOrUpdate function performs merge into requiring the entity class {CsName} to have a primary key</value>
|
|
||||||
</data>
|
|
||||||
<data name="InsertOrUpdate_NotSuport_Generic_UseEntity" xml:space="preserve">
|
|
||||||
<value>FreeSql: The generic parameter for InsertOrUpdate<>does not support {typeofT1}. Pass in your entity class</value>
|
|
||||||
</data>
|
|
||||||
<data name="Install_FreeSql_Extensions_LazyLoading" xml:space="preserve">
|
|
||||||
<value>FreeSql: FreeSql needs to be installed for Delayed Loading. Extensions. LazyLoading. Dll, downloadable to nuget</value>
|
|
||||||
</data>
|
|
||||||
<data name="LazyLoading_CompilationError" xml:space="preserve">
|
|
||||||
<value>FreeSql: {trytbTypeName} Compilation error: {exMessage}\r\n\r\n{cscode}</value>
|
|
||||||
</data>
|
|
||||||
<data name="LazyLoading_EntityMustDeclarePublic" xml:space="preserve">
|
|
||||||
<value>FreeSql: Entity type {trytbTypeName} must be declared public</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_AsSelect_NotSupport_Sum_Avg_etc" xml:space="preserve">
|
|
||||||
<value>FreeSql: ManyToMany navigation properties. AsSelect() is temporarily unavailable for the Sum/Avg/Max/Min/First/ToOne/ToList method</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_NotFound_CorrespondingField" xml:space="preserve">
|
|
||||||
<value>FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} did not find a corresponding field in {tbmidCsName}, such as: {midTypePropsTrytbName}{findtrytbPkCsName}, {midTypePropsTrytbName}_ {findtrytbPkCsName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_ParsingError_EntityMissing_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} missing primary key identity, [Column (IsPrimary = true)]</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_ParsingError_EntityMustHas_NavigateCollection" xml:space="preserve">
|
|
||||||
<value>FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} must have a corresponding [Navigate (ManyToMany = x)] collection property</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_ParsingError_InconsistentType" xml:space="preserve">
|
|
||||||
<value>FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, {tbmidCsName}. {trycolCsName} and {trytbCsName}. {trytbPrimarysCsName} type inconsistent</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_ParsingError_IntermediateClass_ErrorMessage" xml:space="preserve">
|
|
||||||
<value>FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}.{midTypePropsTrytbName} Error: {exMessage}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne" xml:space="preserve">
|
|
||||||
<value>FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}. The {midTypePropsTrytbName} navigation property is not ManyToOne or OneToOne</value>
|
|
||||||
</data>
|
|
||||||
<data name="Mapping_Exception_HasNo_SamePropertyName" xml:space="preserve">
|
|
||||||
<value>FreeSql: Mapping exception: {name} None of the property names are the same</value>
|
|
||||||
</data>
|
|
||||||
<data name="MasterPool_IsNull_UseTransaction" xml:space="preserve">
|
|
||||||
<value>FreeSql: Ado. MasterPool value is null, this operation cannot self-enable transactions, please explicitly pass [transaction object] resolution</value>
|
|
||||||
</data>
|
|
||||||
<data name="Missing_FreeSqlProvider_Package" xml:space="preserve">
|
|
||||||
<value>FreeSql: Missing FreeSql database implementation package: FreeSql.Provider.{Provider}.Dll, downloadable to nuget</value>
|
|
||||||
</data>
|
|
||||||
<data name="Missing_FreeSqlProvider_Package_Reason" xml:space="preserve">
|
|
||||||
<value>FreeSql: The FreeSql database implementation package is missing: {dll} can be downloaded to nuget; If there is {dll} and an error still occurs (due to environmental issues that cause the type to be unreflected), manually pass in typeof ({providerType}) in the third parameter of UseConnectionString/UseConnectionFactory</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_Bind_Number_Different" xml:space="preserve">
|
|
||||||
<value>FreeSql: Navigation property {trytbTypeName}. The number of {pnvName} attributes [Navigate] Binds ({bindColumnsCount}) is different from the number of external primary keys ({tbrefPrimarysLength})</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_Missing_AsSelect" xml:space="preserve">
|
|
||||||
<value>FreeSql: {tb2DbName}. {mp2MemberName} Navigation Property Collection forgotten. AsSelect()? If used in ToList (a => a. {mp2MemberName}), step by step to refer to the IncludeMany document.</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_Missing_SetProperty" xml:space="preserve">
|
|
||||||
<value>FreeSql: Navigation Properties {trytbTypeDisplayCsharp}. Missing set attribute for {pName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_NotFound_CorrespondingField" xml:space="preserve">
|
|
||||||
<value>FreeSql: Navigation property {trytbTypeName}. {pnvName} No corresponding fields were found, such as: {pnvName}{findtbrefPkCsName}, {pnvName}_ {findtbrefPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping.</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_ParsingError_EntityMissingPrimaryKey" xml:space="preserve">
|
|
||||||
<value>FreeSql: Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {trytcTypeName} missing primary key identity, [Column (IsPrimary = true)]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_ParsingError_InconsistentType" xml:space="preserve">
|
|
||||||
<value>FreeSql: Navigation property {trytbTypeName}. {pnvName} parsing error, {trytbCsName}. {trycolCsName} and {tbrefCsName}. {tbrefPrimarysCsName} type inconsistent</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_ParsingError_NotFound_Property" xml:space="preserve">
|
|
||||||
<value>FreeSql: Navigation property {trytbTypeName}. {pnvName} attribute [Navigate] parsing error, property not found at {tbrefTypeName}: {bi}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NoPrimaryKey_UseSetDto" xml:space="preserve">
|
|
||||||
<value>FreeSql: {tableTypeDisplayCsharp} has no primary key defined and cannot use SetSource. Try SetDto</value>
|
|
||||||
</data>
|
|
||||||
<data name="NoProperty_Defined" xml:space="preserve">
|
|
||||||
<value>FreeSql: No properties defined</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented" xml:space="preserve">
|
|
||||||
<value>FreeSql: Not implemented</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented_Expression" xml:space="preserve">
|
|
||||||
<value>FreeSql: Function expression {exp} parsing not implemented</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented_Expression_ParameterUseConstant" xml:space="preserve">
|
|
||||||
<value>FreeSql: Function expression {exp} parsing not implemented, parameter {expArguments} must be constant</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented_Expression_UseAsSelect" xml:space="preserve">
|
|
||||||
<value>FreeSql: Function expression {exp} parsing is not implemented. Use if you are working on a navigation property collection. AsSelect (). {exp3MethodName} ({exp3ArgumentsCount})</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented_MemberAcess_Constant" xml:space="preserve">
|
|
||||||
<value>FreeSql: Constant under MemberAccess is not implemented</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented_Name" xml:space="preserve">
|
|
||||||
<value>FreeSql: {name} is not implemented</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Support" xml:space="preserve">
|
|
||||||
<value>FreeSql: I won't support it</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Support_OrderByRandom" xml:space="preserve">
|
|
||||||
<value>FreeSql: {dataType} does not support OrderByRandom sorting</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Valid_Navigation_Property" xml:space="preserve">
|
|
||||||
<value>FreeSql: {property} is not a valid navigation property</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Column" xml:space="preserve">
|
|
||||||
<value>FreeSql: {dbName} Column {memberName} not found</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_CsName_Column" xml:space="preserve">
|
|
||||||
<value>FreeSql: Cannot find the column corresponding to {CsName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Property" xml:space="preserve">
|
|
||||||
<value>FreeSql: Attribute not found: {memberName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_PropertyName" xml:space="preserve">
|
|
||||||
<value>FreeSql: Property name {proto} not found</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Reflection" xml:space="preserve">
|
|
||||||
<value>FreeSql: Custom could not find the corresponding {{reflection information}}:{fiValueCustomArray}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Static_MethodName" xml:space="preserve">
|
|
||||||
<value>FreeSql: Custom could not find the corresponding {{static method name}}:{fiValueCustomArray}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Table_Property_AsTable" xml:space="preserve">
|
|
||||||
<value>FreeSql: The property name {atmGroupsValue} set by [Table(AsTable = xx)] does not exist</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotSpecified_UseConnectionString_UseConnectionFactory" xml:space="preserve">
|
|
||||||
<value>FreeSql: No UseConnectionString or UseConnectionFactory specified</value>
|
|
||||||
</data>
|
|
||||||
<data name="ObjectPool_Get_Timeout" xml:space="preserve">
|
|
||||||
<value>FreeSql: [{policyName}] ObjectPool. {GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081</value>
|
|
||||||
</data>
|
|
||||||
<data name="ObjectPool_GetAsync_Queue_Long" xml:space="preserve">
|
|
||||||
<value>FreeSql: [{policyName}] ObjectPool. GetAsync() The queue is too long. Policy. AsyncGetCapacity = {asyncGetCapacity}</value>
|
|
||||||
</data>
|
|
||||||
<data name="OneToMany_NotFound_CorrespondingField" xml:space="preserve">
|
|
||||||
<value>FreeSql: [OneToMany] Navigation property {trytbTypeName}.{pnvName} did not find a corresponding field in {tbrefCsName}, such as: {findtrytb}{findtrytbPkCsName}, {findtrytb}_{findtrytbPkCsName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="OneToMany_ParsingError_InconsistentType" xml:space="preserve">
|
|
||||||
<value>FreeSql: [OneToMany] Navigation property {trytbTypeName}.{pnvName} parsing error, {trytbCsName}.{trytbPrimarysCsName} and {tbrefCsName}.{trycolCsName} is of inconsistent type</value>
|
|
||||||
</data>
|
|
||||||
<data name="OneToMany_UseNavigate" xml:space="preserve">
|
|
||||||
<value>, {refpropName}{findtrytbPkCsName}, {refpropName}_{findtrytbPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping.</value>
|
|
||||||
</data>
|
|
||||||
<data name="Parameter_Field_NotSpecified" xml:space="preserve">
|
|
||||||
<value>FreeSql: Parameter field not specified</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotValid_Collection" xml:space="preserve">
|
|
||||||
<value>FreeSql: The {property} parameter is incorrect, it is not a collection property and must be IList<T>or ICollection<T></value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotValid_Navigation" xml:space="preserve">
|
|
||||||
<value>FreeSql: The {property} parameter is incorrect, it is not a valid navigation property</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotValid_PropertyName" xml:space="preserve">
|
|
||||||
<value>FreeSql: {where} parameter error, {keyval} is not a valid property name and cannot be found in entity class {reftbTypeDisplayCsharp}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotValid_UseCommas" xml:space="preserve">
|
|
||||||
<value>FreeSql: {property} parameter error, format "TopicId=Id, multiple groups using comma connection"</value>
|
|
||||||
</data>
|
|
||||||
<data name="Parsing_Failed" xml:space="preserve">
|
|
||||||
<value>FreeSql: Parsing failed {callExpMethodName} {message}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Policy_ObjectPool_Dispose" xml:space="preserve">
|
|
||||||
<value>FreeSql: [{policyName}] The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079</value>
|
|
||||||
</data>
|
|
||||||
<data name="Policy_Status_NotAvailable" xml:space="preserve">
|
|
||||||
<value>FreeSql: The {policyName} status is unavailable and cannot be used until the background checker is restored. {UnavailableExceptionMessage}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Properties_AsRowLock_Must_Numeric_Byte" xml:space="preserve">
|
|
||||||
<value>FreeSql: The property {trytbVersionColumnCsName} is labeled as a row lock (optimistic lock) (IsVersion), but it must be a numeric type or byte[] or string, and it cannot be Nullable</value>
|
|
||||||
</data>
|
|
||||||
<data name="Properties_Cannot_Null" xml:space="preserve">
|
|
||||||
<value>FreeSql: Properrties parameter cannot be empty</value>
|
|
||||||
</data>
|
|
||||||
<data name="Property_Cannot_Find" xml:space="preserve">
|
|
||||||
<value>FreeSql: {property} property name not found</value>
|
|
||||||
</data>
|
|
||||||
<data name="Range_Comma_Separateda_By2Char" xml:space="preserve">
|
|
||||||
<value>FreeSql: Range requires that Value be comma-separated and 2-length</value>
|
|
||||||
</data>
|
|
||||||
<data name="RollBack" xml:space="preserve">
|
|
||||||
<value>FreeSql: RollBack</value>
|
|
||||||
</data>
|
|
||||||
<data name="RunTimeError_Reflection_IncludeMany" xml:space="preserve">
|
|
||||||
<value>FreeSql: Runtime error, reflection failed to get IncludeMany method</value>
|
|
||||||
</data>
|
|
||||||
<data name="Set_Column_IsNullable_False" xml:space="preserve">
|
|
||||||
<value>FreeSql: {qoteSql} is NULL unless the attribute [Column (IsNullable = false)]</value>
|
|
||||||
</data>
|
|
||||||
<data name="SubTableFieldValue_CannotLessThen" xml:space="preserve">
|
|
||||||
<value>FreeSql: Subtable field value'{dt}'cannot be less than'{beginTime}'</value>
|
|
||||||
</data>
|
|
||||||
<data name="SubTableFieldValue_IsNotNull" xml:space="preserve">
|
|
||||||
<value>FreeSql: Subtable field value cannot be null</value>
|
|
||||||
</data>
|
|
||||||
<data name="SubTableFieldValue_NotConvertDateTime" xml:space="preserve">
|
|
||||||
<value>FreeSql: The tabular field value'{columnValue}'cannot be converted to DateTime</value>
|
|
||||||
</data>
|
|
||||||
<data name="SubTableFieldValue_NotMatchTable" xml:space="preserve">
|
|
||||||
<value>FreeSql: Table field value'{dt}'does not match table name</value>
|
|
||||||
</data>
|
|
||||||
<data name="T2_Type_Error" xml:space="preserve">
|
|
||||||
<value>FreeSql: Type T2 Error</value>
|
|
||||||
</data>
|
|
||||||
<data name="TableName_Format_Error" xml:space="preserve">
|
|
||||||
<value>FreeSql: TableName format error, example: "log_{yyyyMMdd}"</value>
|
|
||||||
</data>
|
|
||||||
<data name="Type_AsType_Parameter_Error" xml:space="preserve">
|
|
||||||
<value>FreeSql: {Type}. AsType parameter error, please pass in the correct entity type</value>
|
|
||||||
</data>
|
|
||||||
<data name="Type_Cannot_Access_Constructor" xml:space="preserve">
|
|
||||||
<value>FreeSql: The {thatFullName} type cannot access the constructor</value>
|
|
||||||
</data>
|
|
||||||
<data name="Type_Error_Name" xml:space="preserve">
|
|
||||||
<value>FreeSql: {name} type error</value>
|
|
||||||
</data>
|
|
||||||
<data name="TypeAsType_NotSupport_Object" xml:space="preserve">
|
|
||||||
<value>FreeSql: {Type}. AsType parameter does not support specifying as object</value>
|
|
||||||
</data>
|
|
||||||
<data name="TypeError_CannotUse_IncludeMany" xml:space="preserve">
|
|
||||||
<value>FreeSql: Type {typeofFullName} error, IncludeMany cannot be used</value>
|
|
||||||
</data>
|
|
||||||
<data name="Unable_Parse_Expression" xml:space="preserve">
|
|
||||||
<value>FreeSql: Unable to parse expression: {exp}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Unable_Parse_ExpressionMethod" xml:space="preserve">
|
|
||||||
<value>FreeSql: Unable to parse expression method {exp3tmpCallMethodName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Use_InsertDict_Method" xml:space="preserve">
|
|
||||||
<value>FreeSql: Please use fsql. InsertDict (dict) method inserts dictionary data</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_NotFound_Name" xml:space="preserve">
|
|
||||||
<value>FreeSql: {name} not found</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_SlaveDatabase" xml:space="preserve">
|
|
||||||
<value>FreeSql: Slave Database</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_MasterDatabase" xml:space="preserve">
|
|
||||||
<value>FreeSql: Master Database</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_Access_InsertOnlyOneAtTime" xml:space="preserve">
|
|
||||||
<value>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..</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_BaseEntity_Initialization_Error" xml:space="preserve">
|
|
||||||
<value>FreeSql: BaseEntity. Initialization initialization error, get IFreeSql is null</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_BlockAccess_WaitForRecovery" xml:space="preserve">
|
|
||||||
<value>FreeSql: [{thisName}] Block access and wait for recovery: {exMessage}</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_CannotBeConverted_To_ISelect" xml:space="preserve">
|
|
||||||
<value>FreeSql: IQueryable<{typeofName}> cannot be converted to ISelect<{typeofName}> because its implementation is not FreeSql.Extensions.Linq.QueryableProvider</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_ConnectionStringError" xml:space="preserve">
|
|
||||||
<value>FreeSql: Connection string error</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_ConnectionStringError_Check" xml:space="preserve">
|
|
||||||
<value>FreeSql: [{thisName}] Connection string error, please check.</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_ConnectionStringError_CheckProject" xml:space="preserve">
|
|
||||||
<value>FreeSql: Connection string error, or check project properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_ConnectionStringError_CheckProjectConnection" xml:space="preserve">
|
|
||||||
<value>FreeSql: [{thisName}] Connection string error, please check. Or check Project Properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_CustomAdapter_Cannot_Use_CreateCommand" xml:space="preserve">
|
|
||||||
<value>FreeSql: FreeSql.Provider.CustomAdapter cannot use CreateCommand</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_CustomAdapter_OnlySuppport_UseConnectionFactory " xml:space="preserve">
|
|
||||||
<value>FreeSql: FreeSql.Provider.CustomAdapter only supports building IFreeSql in the UseConnectionFactory way</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_Dameng_NotSupport_TablespaceSchemas " xml:space="preserve">
|
|
||||||
<value>FreeSql: Dream CodeFirst does not support code creation tablespace and schemas {tbname}</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_DB_Parameter_Error_NoConnectionString" xml:space="preserve">
|
|
||||||
<value>FreeSql: -DB parameter error, no ConnectionString provided</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_DB_ParameterError" xml:space="preserve">
|
|
||||||
<value>FreeSql: -DB parameter error, format: MySql, ConnectionString</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_DB_ParameterError_UnsupportedType" xml:space="preserve">
|
|
||||||
<value>FreeSql: -DB parameter error, unsupported type: "{dbargs}"</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_Features_Unique" xml:space="preserve">
|
|
||||||
<value>FreeSql: {method} is FreeSql.Provider.{provider} specific features</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_InsertOrUpdate_Unable_UpdateColumns" xml:space="preserve">
|
|
||||||
<value>FreeSql: InsertOrUpdate Sqlite was unable to complete the UpdateColumns operation</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_MygisGeometry_NotImplement" xml:space="preserve">
|
|
||||||
<value>FreeSql: MygisGeometry. Parse does not implement "{wkt}"</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_NameOptions_Incorrect" xml:space="preserve">
|
|
||||||
<value>FreeSql: -NameOptions parameter incorrect, format: 0,0,0,0</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_Not_Implemented_Feature" xml:space="preserve">
|
|
||||||
<value>FreeSql: This function is not implemented</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_Not_Implemented_FeedBack" xml:space="preserve">
|
|
||||||
<value>FreeSql: Unrealized error, please feedback to author</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_NotImplementSkipOffset" xml:space="preserve">
|
|
||||||
<value>FreeSql: FreeSql.Provider.{providerName} does not implement Skip/Offset functionality, use to determine last ID if paging is required</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_OldTableExists" xml:space="preserve">
|
|
||||||
<value>FreeSql: Old table (OldName): {tboldname} exists, database already exists {tbname} table, cannot rename</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_OnConflictDoUpdate_MustIsPrimary" xml:space="preserve">
|
|
||||||
<value>FreeSql: The OnConflictDoUpdate feature requires that entity classes must set the IsPrimary property</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_Oracle_NotSupport_TablespaceSchemas" xml:space="preserve">
|
|
||||||
<value>FreeSql: Oracle CodeFirst does not support code creation of tablespace and schemas {tbname}</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_ParsingFailed_UseRestoreToSelect" xml:space="preserve">
|
|
||||||
<value>FreeSql: Parsing failed {callExpMethodName} {message}, hint: Extension method IQueryable can be used. RestoreToSelect() reverted to ISelect re-query</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_RequiresEntityPrimaryKey" xml:space="preserve">
|
|
||||||
<value>FreeSql: InsertOrUpdate + IfExistsDoNothing + {providerName} requires the entity class {tableCsName} to have a primary key</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_SelectManayErrorType" xml:space="preserve">
|
|
||||||
<value>FreeSql: SelectMany error type: {typeFullName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_Type_IsNot_Migrable" xml:space="preserve">
|
|
||||||
<value>FreeSql: Type {objentityTypeFullName} is not migrable</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_Type_IsNot_Migrable_0Attributes" xml:space="preserve">
|
|
||||||
<value>FreeSql: Type {objentityTypeFullName} is not migrable, migratable property 0</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_TypeMappingNotImplemented" xml:space="preserve">
|
|
||||||
<value>FreeSql: {columnDbTypeTextFull} type mapping not implemented</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_WrongParameter" xml:space="preserve">
|
|
||||||
<value>FreeSql: Wrong parameter setting: {args}</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_ObjectPool" xml:space="preserve">
|
|
||||||
<value>FreeSql: Object pool</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
|
||||||
@@ -1,638 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<data name="AsTable_PropertyName_FormatError" xml:space="preserve">
|
|
||||||
<value>[Table(AsTable = "{asTable}")] 特性值格式错误</value>
|
|
||||||
</data>
|
|
||||||
<data name="AsTable_PropertyName_NotDateTime" xml:space="preserve">
|
|
||||||
<value>[Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不是 DateTime 类型</value>
|
|
||||||
</data>
|
|
||||||
<data name="Available_Failed_Get_Resource" xml:space="preserve">
|
|
||||||
<value>{name}: Failed to get resource {statistics}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Available_Thrown_Exception" xml:space="preserve">
|
|
||||||
<value>{name}: An exception needs to be thrown</value>
|
|
||||||
</data>
|
|
||||||
<data name="Bad_Expression_Format" xml:space="preserve">
|
|
||||||
<value>错误的表达式格式 {column}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Before_Chunk_Cannot_Use_Select" xml:space="preserve">
|
|
||||||
<value>Chunk 功能之前不可使用 Select</value>
|
|
||||||
</data>
|
|
||||||
<data name="Begin_Transaction_Then_ForUpdate" xml:space="preserve">
|
|
||||||
<value>安全起见,请务必在事务开启之后,再使用 ForUpdate</value>
|
|
||||||
</data>
|
|
||||||
<data name="Cannot_Be_NULL" xml:space="preserve">
|
|
||||||
<value>不能为 null</value>
|
|
||||||
</data>
|
|
||||||
<data name="Cannot_Be_NULL_Name" xml:space="preserve">
|
|
||||||
<value>{name} 不能为 null</value>
|
|
||||||
</data>
|
|
||||||
<data name="Cannot_Match_Property" xml:space="preserve">
|
|
||||||
<value>无法匹配 {property}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Cannot_Resolve_ExpressionTree" xml:space="preserve">
|
|
||||||
<value>{property} 无法解析为表达式树</value>
|
|
||||||
</data>
|
|
||||||
<data name="Check_UseConnectionString" xml:space="preserve">
|
|
||||||
<value>参数 masterConnectionString 不可为空,请检查 UseConnectionString</value>
|
|
||||||
</data>
|
|
||||||
<data name="Commit" xml:space="preserve">
|
|
||||||
<value>提交</value>
|
|
||||||
</data>
|
|
||||||
<data name="Connection_Failed_Switch_Servers" xml:space="preserve">
|
|
||||||
<value>连接失败,准备切换其他可用服务器</value>
|
|
||||||
</data>
|
|
||||||
<data name="Custom_Expression_ParsingError" xml:space="preserve">
|
|
||||||
<value>自定义表达式解析错误:类型 {exp3MethodDeclaringType} 需要定义 static ThreadLocal<ExpressionCallContext> 字段、字段、字段(重要三次提醒)</value>
|
|
||||||
</data>
|
|
||||||
<data name="Custom_Reflection_IsNotNull" xml:space="preserve">
|
|
||||||
<value>Custom { 反射信息 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }</value>
|
|
||||||
</data>
|
|
||||||
<data name="Custom_StaticMethodName_IsNotNull" xml:space="preserve">
|
|
||||||
<value>Custom { 静态方法名 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }</value>
|
|
||||||
</data>
|
|
||||||
<data name="Custom_StaticMethodName_NotSet_DynamicFilterCustom" xml:space="preserve">
|
|
||||||
<value>Custom 对应的{{ 静态方法名 }}:{fiValueCustomArray} 未设置 [DynamicFilterCustomAttribute] 特性</value>
|
|
||||||
</data>
|
|
||||||
<data name="CustomFieldSeparatedBySpaces" xml:space="preserve">
|
|
||||||
<value>Custom 要求 Field 应该空格分割,并且长度为 2,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }</value>
|
|
||||||
</data>
|
|
||||||
<data name="DataType_AsType_Inconsistent" xml:space="preserve">
|
|
||||||
<value>操作的数据类型({dataDisplayCsharp}) 与 AsType({tableTypeDisplayCsharp}) 不一致,请检查。</value>
|
|
||||||
</data>
|
|
||||||
<data name="DateRange_Comma_Separateda_By2Char" xml:space="preserve">
|
|
||||||
<value>DateRange 要求 Value 应该逗号分割,并且长度为 2</value>
|
|
||||||
</data>
|
|
||||||
<data name="DateRange_DateFormat_yyyy" xml:space="preserve">
|
|
||||||
<value>DateRange 要求 Value[1] 格式必须为:yyyy、yyyy-MM、yyyy-MM-dd、yyyy-MM-dd HH、yyyy、yyyy-MM-dd HH:mm</value>
|
|
||||||
</data>
|
|
||||||
<data name="DbUpdateVersionException_RowLevelOptimisticLock" xml:space="preserve">
|
|
||||||
<value>记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{sourceCount},影响的行数{affrows}。</value>
|
|
||||||
</data>
|
|
||||||
<data name="Different_Number_SlaveConnectionString_SlaveWeights" xml:space="preserve">
|
|
||||||
<value>SlaveConnectionString 数量与 SlaveWeights 不相同</value>
|
|
||||||
</data>
|
|
||||||
<data name="Duplicate_ColumnAttribute" xml:space="preserve">
|
|
||||||
<value>ColumnAttribute.Name {colattrName} 重复存在,请检查(注意:不区分大小写)</value>
|
|
||||||
</data>
|
|
||||||
<data name="Duplicate_PropertyName" xml:space="preserve">
|
|
||||||
<value>属性名 {pName} 重复存在,请检查(注意:不区分大小写)</value>
|
|
||||||
</data>
|
|
||||||
<data name="Entity_Must_Primary_Key" xml:space="preserve">
|
|
||||||
<value>{function} 功能要求实体类 {tableCsName} 必须有主键</value>
|
|
||||||
</data>
|
|
||||||
<data name="Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys" xml:space="preserve">
|
|
||||||
<value>{tbTypeFullName} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键</value>
|
|
||||||
</data>
|
|
||||||
<data name="Entity_NotParentChild_Relationship" xml:space="preserve">
|
|
||||||
<value>{tbTypeFullName} 不是父子关系,无法使用该功能</value>
|
|
||||||
</data>
|
|
||||||
<data name="EspeciallySubquery_Cannot_Parsing" xml:space="preserve">
|
|
||||||
<value>这个特别的子查询不能解析</value>
|
|
||||||
</data>
|
|
||||||
<data name="Expression_Error_Use_ParameterExpression" xml:space="preserve">
|
|
||||||
<value>表达式错误,它的顶级对象不是 ParameterExpression:{exp}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Expression_Error_Use_Successive_MemberAccess_Type" xml:space="preserve">
|
|
||||||
<value>表达式错误,它不是连续的 MemberAccess 类型:{exp}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ExpressionTree_Convert_Type_Error" xml:space="preserve">
|
|
||||||
<value>ExpressionTree 转换类型错误,值({value}),类型({valueTypeFullName}),目标类型({typeFullName}),{exMessage}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Failed_SubTable_FieldValue" xml:space="preserve">
|
|
||||||
<value>未能解析分表字段值 {sqlWhere}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Functions_AsTable_NotImplemented" xml:space="preserve">
|
|
||||||
<value>AsTable 未实现的功能 {asTable}</value>
|
|
||||||
</data>
|
|
||||||
<data name="GBase_NotSupport_OtherThanCommas" xml:space="preserve">
|
|
||||||
<value>GBase 暂时不支持逗号以外的分割符</value>
|
|
||||||
</data>
|
|
||||||
<data name="Generated_Same_SubTable" xml:space="preserve">
|
|
||||||
<value>tableName:{tableName} 生成了相同的分表名</value>
|
|
||||||
</data>
|
|
||||||
<data name="GetPrimarys_ParameterError_IsNotDictKey " xml:space="preserve">
|
|
||||||
<value>GetPrimarys 传递的参数 "{primary}" 不正确,它不属于字典数据的键名</value>
|
|
||||||
</data>
|
|
||||||
<data name="Has_Specified_Cannot_Specified_Second" xml:space="preserve">
|
|
||||||
<value>已经指定了 {first},不能再指定 {second}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Ignored_Check_Confirm_PublicGetSet" xml:space="preserve">
|
|
||||||
<value>{tb2DbName}.{mp2MemberName} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public</value>
|
|
||||||
</data>
|
|
||||||
<data name="Include_ParameterType_Error" xml:space="preserve">
|
|
||||||
<value>Include 参数类型错误</value>
|
|
||||||
</data>
|
|
||||||
<data name="Include_ParameterType_Error_Use_IncludeMany" xml:space="preserve">
|
|
||||||
<value>Include 参数类型错误,集合属性请使用 IncludeMany</value>
|
|
||||||
</data>
|
|
||||||
<data name="Include_ParameterType_Error_Use_MemberAccess" xml:space="preserve">
|
|
||||||
<value>Include 参数类型错误,表达式类型应该为 MemberAccess</value>
|
|
||||||
</data>
|
|
||||||
<data name="IncludeMany_NotValid_Navigation" xml:space="preserve">
|
|
||||||
<value>IncludeMany 类型 {tbTypeDisplayCsharp} 的属性 {collMemMemberName} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性</value>
|
|
||||||
</data>
|
|
||||||
<data name="IncludeMany_ParameterError_OnlyUseOneParameter" xml:space="preserve">
|
|
||||||
<value>IncludeMany {navigateSelector} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =>new TNavigate {{}})</value>
|
|
||||||
</data>
|
|
||||||
<data name="IncludeMany_ParameterError_Select_ReturnConsistentType" xml:space="preserve">
|
|
||||||
<value>IncludeMany {navigateSelector} 参数错误,Select lambda参数返回值必须和 {collMemElementType} 类型一致</value>
|
|
||||||
</data>
|
|
||||||
<data name="IncludeMany_ParameterType_Error_Use_MemberAccess" xml:space="preserve">
|
|
||||||
<value>IncludeMany 参数1 类型错误,表达式类型应该为 MemberAccess</value>
|
|
||||||
</data>
|
|
||||||
<data name="IncludeMany_ParameterTypeError" xml:space="preserve">
|
|
||||||
<value>IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =>c.aid == a.id).Select(a=> new TNavigate{{}})</value>
|
|
||||||
</data>
|
|
||||||
<data name="InsertInto_No_Property_Selected" xml:space="preserve">
|
|
||||||
<value>ISelect.InsertInto() 未选择属性: {displayCsharp}</value>
|
|
||||||
</data>
|
|
||||||
<data name="InsertInto_TypeError" xml:space="preserve">
|
|
||||||
<value>ISelect.InsertInto() 类型错误: {displayCsharp}</value>
|
|
||||||
</data>
|
|
||||||
<data name="InsertOrUpdate_Must_Primary_Key" xml:space="preserve">
|
|
||||||
<value>InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键</value>
|
|
||||||
</data>
|
|
||||||
<data name="InsertOrUpdate_NotSuport_Generic_UseEntity" xml:space="preserve">
|
|
||||||
<value>InsertOrUpdate<>的泛型参数 不支持 {typeofT1},请传递您的实体类</value>
|
|
||||||
</data>
|
|
||||||
<data name="Install_FreeSql_Extensions_LazyLoading" xml:space="preserve">
|
|
||||||
<value>【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载</value>
|
|
||||||
</data>
|
|
||||||
<data name="LazyLoading_CompilationError" xml:space="preserve">
|
|
||||||
<value>【延时加载】{trytbTypeName} 编译错误:{exMessage}\r\n\r\n{cscode}</value>
|
|
||||||
</data>
|
|
||||||
<data name="LazyLoading_EntityMustDeclarePublic" xml:space="preserve">
|
|
||||||
<value>【延时加载】实体类型 {trytbTypeName} 必须声明为 public</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_AsSelect_NotSupport_Sum_Avg_etc" xml:space="preserve">
|
|
||||||
<value>ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_NotFound_CorrespondingField" xml:space="preserve">
|
|
||||||
<value>【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_ParsingError_EntityMissing_PrimaryKey" xml:space="preserve">
|
|
||||||
<value>【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)]</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_ParsingError_EntityMustHas_NavigateCollection" xml:space="preserve">
|
|
||||||
<value>【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_ParsingError_InconsistentType" xml:space="preserve">
|
|
||||||
<value>【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_ParsingError_IntermediateClass_ErrorMessage" xml:space="preserve">
|
|
||||||
<value>【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage}</value>
|
|
||||||
</data>
|
|
||||||
<data name="ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne" xml:space="preserve">
|
|
||||||
<value>【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】</value>
|
|
||||||
</data>
|
|
||||||
<data name="Mapping_Exception_HasNo_SamePropertyName" xml:space="preserve">
|
|
||||||
<value>映射异常:{name} 没有一个属性名相同</value>
|
|
||||||
</data>
|
|
||||||
<data name="MasterPool_IsNull_UseTransaction" xml:space="preserve">
|
|
||||||
<value>Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决</value>
|
|
||||||
</data>
|
|
||||||
<data name="Missing_FreeSqlProvider_Package" xml:space="preserve">
|
|
||||||
<value>缺少 FreeSql 数据库实现包:FreeSql.Provider.{Provider}.dll,可前往 nuget 下载</value>
|
|
||||||
</data>
|
|
||||||
<data name="Missing_FreeSqlProvider_Package_Reason" xml:space="preserve">
|
|
||||||
<value>缺少 FreeSql 数据库实现包:{dll},可前往 nuget 下载;如果存在 {dll} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({providerType})</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_Bind_Number_Different" xml:space="preserve">
|
|
||||||
<value>导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] Bind 数目({bindColumnsCount}) 与 外部主键数目({tbrefPrimarysLength}) 不相同</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_Missing_AsSelect" xml:space="preserve">
|
|
||||||
<value>{tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_Missing_SetProperty" xml:space="preserve">
|
|
||||||
<value>【导航属性】{trytbTypeDisplayCsharp}.{pName} 缺少 set 属性</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_NotFound_CorrespondingField" xml:space="preserve">
|
|
||||||
<value>导航属性 {trytbTypeName}.{pnvName} 没有找到对应的字段,如:{pnvName}{findtbrefPkCsName}、{pnvName}_{findtbrefPkCsName}。或者使用 [Navigate] 特性指定关系映射。</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_ParsingError_EntityMissingPrimaryKey" xml:space="preserve">
|
|
||||||
<value>导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_ParsingError_InconsistentType" xml:space="preserve">
|
|
||||||
<value>导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trycolCsName} 和 {tbrefCsName}.{tbrefPrimarysCsName} 类型不一致</value>
|
|
||||||
</data>
|
|
||||||
<data name="Navigation_ParsingError_NotFound_Property" xml:space="preserve">
|
|
||||||
<value>导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] 解析错误,在 {tbrefTypeName} 未找到属性:{bi}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NoPrimaryKey_UseSetDto" xml:space="preserve">
|
|
||||||
<value>{tableTypeDisplayCsharp} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键</value>
|
|
||||||
</data>
|
|
||||||
<data name="NoProperty_Defined" xml:space="preserve">
|
|
||||||
<value> 没有定义属性 </value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented" xml:space="preserve">
|
|
||||||
<value>未实现</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented_Expression" xml:space="preserve">
|
|
||||||
<value>未实现函数表达式 {exp} 解析</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented_Expression_ParameterUseConstant" xml:space="preserve">
|
|
||||||
<value>未实现函数表达式 {exp} 解析,参数 {expArguments} 必须为常量</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented_Expression_UseAsSelect" xml:space="preserve">
|
|
||||||
<value>未实现函数表达式 {exp} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{exp3MethodName}({exp3ArgumentsCount})</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented_MemberAcess_Constant" xml:space="preserve">
|
|
||||||
<value>未实现 MemberAccess 下的 Constant</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Implemented_Name" xml:space="preserve">
|
|
||||||
<value>未实现 {name}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Support" xml:space="preserve">
|
|
||||||
<value>不支持</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Support_OrderByRandom" xml:space="preserve">
|
|
||||||
<value>{dataType} 不支持 OrderByRandom 随机排序</value>
|
|
||||||
</data>
|
|
||||||
<data name="Not_Valid_Navigation_Property" xml:space="preserve">
|
|
||||||
<value>{property} 不是有效的导航属性</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Column" xml:space="preserve">
|
|
||||||
<value>{dbName} 找不到列 {memberName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_CsName_Column" xml:space="preserve">
|
|
||||||
<value>找不到 {CsName} 对应的列</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Property" xml:space="preserve">
|
|
||||||
<value>找不到属性:{memberName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_PropertyName" xml:space="preserve">
|
|
||||||
<value>找不到属性名 {proto}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Reflection" xml:space="preserve">
|
|
||||||
<value>Custom 找不到对应的{{ 反射信息 }}:{fiValueCustomArray}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Static_MethodName" xml:space="preserve">
|
|
||||||
<value>Custom 找不到对应的{{ 静态方法名 }}:{fiValueCustomArray}</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotFound_Table_Property_AsTable" xml:space="preserve">
|
|
||||||
<value>[Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不存在</value>
|
|
||||||
</data>
|
|
||||||
<data name="NotSpecified_UseConnectionString_UseConnectionFactory" xml:space="preserve">
|
|
||||||
<value>未指定 UseConnectionString 或者 UseConnectionFactory</value>
|
|
||||||
</data>
|
|
||||||
<data name="ObjectPool_Get_Timeout" xml:space="preserve">
|
|
||||||
<value>【{policyName}】ObjectPool.{GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081</value>
|
|
||||||
</data>
|
|
||||||
<data name="ObjectPool_GetAsync_Queue_Long" xml:space="preserve">
|
|
||||||
<value>【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity}</value>
|
|
||||||
</data>
|
|
||||||
<data name="OneToMany_NotFound_CorrespondingField" xml:space="preserve">
|
|
||||||
<value>【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="OneToMany_ParsingError_InconsistentType" xml:space="preserve">
|
|
||||||
<value>【OneToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trytbPrimarysCsName} 和 {tbrefCsName}.{trycolCsName} 类型不一致</value>
|
|
||||||
</data>
|
|
||||||
<data name="OneToMany_UseNavigate" xml:space="preserve">
|
|
||||||
<value>、{refpropName}{findtrytbPkCsName}、{refpropName}_{findtrytbPkCsName}。或者使用 [Navigate] 特性指定关系映射。</value>
|
|
||||||
</data>
|
|
||||||
<data name="Parameter_Field_NotSpecified" xml:space="preserve">
|
|
||||||
<value>参数 field 未指定</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotValid_Collection" xml:space="preserve">
|
|
||||||
<value>{property} 参数错误,它不是集合属性,必须为 IList<T> 或者 ICollection<T></value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotValid_Navigation" xml:space="preserve">
|
|
||||||
<value>{property} 参数错误,它不是有效的导航属性</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotValid_PropertyName" xml:space="preserve">
|
|
||||||
<value>{where} 参数错误,{keyval} 不是有效的属性名,在实体类 {reftbTypeDisplayCsharp} 无法找到</value>
|
|
||||||
</data>
|
|
||||||
<data name="ParameterError_NotValid_UseCommas" xml:space="preserve">
|
|
||||||
<value>{property} 参数错误,格式 "TopicId=Id,多组使用逗号连接" </value>
|
|
||||||
</data>
|
|
||||||
<data name="Parsing_Failed" xml:space="preserve">
|
|
||||||
<value>解析失败 {callExpMethodName} {message}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Policy_ObjectPool_Dispose" xml:space="preserve">
|
|
||||||
<value>【{policyName}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079</value>
|
|
||||||
</data>
|
|
||||||
<data name="Policy_Status_NotAvailable" xml:space="preserve">
|
|
||||||
<value>【{policyName}】状态不可用,等待后台检查程序恢复方可使用。{UnavailableExceptionMessage}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Properties_AsRowLock_Must_Numeric_Byte" xml:space="preserve">
|
|
||||||
<value>属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable</value>
|
|
||||||
</data>
|
|
||||||
<data name="Properties_Cannot_Null" xml:space="preserve">
|
|
||||||
<value>properties 参数不能为空</value>
|
|
||||||
</data>
|
|
||||||
<data name="Property_Cannot_Find" xml:space="preserve">
|
|
||||||
<value>{property} 属性名无法找到</value>
|
|
||||||
</data>
|
|
||||||
<data name="Range_Comma_Separateda_By2Char" xml:space="preserve">
|
|
||||||
<value>Range 要求 Value 应该逗号分割,并且长度为 2</value>
|
|
||||||
</data>
|
|
||||||
<data name="RollBack" xml:space="preserve">
|
|
||||||
<value>回滚</value>
|
|
||||||
</data>
|
|
||||||
<data name="RunTimeError_Reflection_IncludeMany" xml:space="preserve">
|
|
||||||
<value>运行时错误,反射获取 IncludeMany 方法失败</value>
|
|
||||||
</data>
|
|
||||||
<data name="S_Access_InsertOnlyOneAtTime" xml:space="preserve">
|
|
||||||
<value>蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_BaseEntity_Initialization_Error" xml:space="preserve">
|
|
||||||
<value>BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null</value>
|
|
||||||
<comment>Extensions</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_BlockAccess_WaitForRecovery" xml:space="preserve">
|
|
||||||
<value>【{thisName}】Block access and wait for recovery: {exMessage}</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_CannotBeConverted_To_ISelect" xml:space="preserve">
|
|
||||||
<value>无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider</value>
|
|
||||||
<comment>Extensions</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_ConnectionStringError" xml:space="preserve">
|
|
||||||
<value>连接字符串错误</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_ConnectionStringError_Check" xml:space="preserve">
|
|
||||||
<value>【{thisName}】连接字符串错误,请检查。</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_ConnectionStringError_CheckProject" xml:space="preserve">
|
|
||||||
<value>连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_ConnectionStringError_CheckProjectConnection" xml:space="preserve">
|
|
||||||
<value>【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_CustomAdapter_Cannot_Use_CreateCommand" xml:space="preserve">
|
|
||||||
<value>FreeSql.Provider.CustomAdapter 无法使用 CreateCommand</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_CustomAdapter_OnlySuppport_UseConnectionFactory " xml:space="preserve">
|
|
||||||
<value>FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_Dameng_NotSupport_TablespaceSchemas " xml:space="preserve">
|
|
||||||
<value>达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_DB_Parameter_Error_NoConnectionString" xml:space="preserve">
|
|
||||||
<value>-DB 参数错误,未提供 ConnectionString</value>
|
|
||||||
<comment>Extensions</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_DB_ParameterError" xml:space="preserve">
|
|
||||||
<value>-DB 参数错误,格式为:MySql,ConnectionString</value>
|
|
||||||
<comment>Extensions</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_DB_ParameterError_UnsupportedType" xml:space="preserve">
|
|
||||||
<value>-DB 参数错误,不支持的类型:"{dbargs}"</value>
|
|
||||||
<comment>Extensions</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_Features_Unique" xml:space="preserve">
|
|
||||||
<value>{method} 是 FreeSql.Provider.{provider} 特有的功能</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_InsertOrUpdate_Unable_UpdateColumns" xml:space="preserve">
|
|
||||||
<value>fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_MasterDatabase" xml:space="preserve">
|
|
||||||
<value>主库</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_MygisGeometry_NotImplement" xml:space="preserve">
|
|
||||||
<value>MygisGeometry.Parse 未实现 "{wkt}"</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_NameOptions_Incorrect" xml:space="preserve">
|
|
||||||
<value>-NameOptions 参数错误,格式为:0,0,0,0</value>
|
|
||||||
<comment>Extensions</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_Not_Implemented_Feature" xml:space="preserve">
|
|
||||||
<value> 未实现该功能</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_Not_Implemented_FeedBack" xml:space="preserve">
|
|
||||||
<value>未实现错误,请反馈给作者</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_NotFound_Name" xml:space="preserve">
|
|
||||||
<value>找不到 {name}</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_NotImplementSkipOffset" xml:space="preserve">
|
|
||||||
<value>FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_ObjectPool" xml:space="preserve">
|
|
||||||
<value>对象池</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_OldTableExists" xml:space="preserve">
|
|
||||||
<value>旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_OnConflictDoUpdate_MustIsPrimary" xml:space="preserve">
|
|
||||||
<value>OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_Oracle_NotSupport_TablespaceSchemas" xml:space="preserve">
|
|
||||||
<value>Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_ParsingFailed_UseRestoreToSelect" xml:space="preserve">
|
|
||||||
<value>解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询</value>
|
|
||||||
<comment>Extensions</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_RequiresEntityPrimaryKey" xml:space="preserve">
|
|
||||||
<value>fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_SelectManayErrorType" xml:space="preserve">
|
|
||||||
<value>SelectMany 错误的类型:{typeFullName}</value>
|
|
||||||
<comment>Extensions</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_SlaveDatabase" xml:space="preserve">
|
|
||||||
<value>从库</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_Type_IsNot_Migrable" xml:space="preserve">
|
|
||||||
<value>类型 {objentityTypeFullName} 不可迁移</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_Type_IsNot_Migrable_0Attributes" xml:space="preserve">
|
|
||||||
<value>类型 {objentityTypeFullName} 不可迁移,可迁移属性0个</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_TypeMappingNotImplemented" xml:space="preserve">
|
|
||||||
<value>未实现 {columnDbTypeTextFull} 类型映射</value>
|
|
||||||
<comment>Providers</comment>
|
|
||||||
</data>
|
|
||||||
<data name="S_WrongParameter" xml:space="preserve">
|
|
||||||
<value>错误的参数设置:{args}</value>
|
|
||||||
<comment>Extensions</comment>
|
|
||||||
</data>
|
|
||||||
<data name="Set_Column_IsNullable_False" xml:space="preserve">
|
|
||||||
<value>{qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)]</value>
|
|
||||||
</data>
|
|
||||||
<data name="SubTableFieldValue_CannotLessThen" xml:space="preserve">
|
|
||||||
<value>分表字段值 "{dt}" 不能小于 "{beginTime} "</value>
|
|
||||||
</data>
|
|
||||||
<data name="SubTableFieldValue_IsNotNull" xml:space="preserve">
|
|
||||||
<value>分表字段值不能为 null</value>
|
|
||||||
</data>
|
|
||||||
<data name="SubTableFieldValue_NotConvertDateTime" xml:space="preserve">
|
|
||||||
<value>分表字段值 "{columnValue}" 不能转化成 DateTime</value>
|
|
||||||
</data>
|
|
||||||
<data name="SubTableFieldValue_NotMatchTable" xml:space="preserve">
|
|
||||||
<value>分表字段值 "{dt}" 未匹配到分表名</value>
|
|
||||||
</data>
|
|
||||||
<data name="T2_Type_Error" xml:space="preserve">
|
|
||||||
<value>T2 类型错误</value>
|
|
||||||
</data>
|
|
||||||
<data name="TableName_Format_Error" xml:space="preserve">
|
|
||||||
<value>tableName 格式错误,示例:“log_{yyyyMMdd}”</value>
|
|
||||||
</data>
|
|
||||||
<data name="Type_AsType_Parameter_Error" xml:space="preserve">
|
|
||||||
<value>{Type}.AsType 参数错误,请传入正确的实体类型</value>
|
|
||||||
</data>
|
|
||||||
<data name="Type_Cannot_Access_Constructor" xml:space="preserve">
|
|
||||||
<value>{thatFullName} 类型无法访问构造函数</value>
|
|
||||||
</data>
|
|
||||||
<data name="Type_Error_Name" xml:space="preserve">
|
|
||||||
<value>{name} 类型错误</value>
|
|
||||||
</data>
|
|
||||||
<data name="TypeAsType_NotSupport_Object" xml:space="preserve">
|
|
||||||
<value>{Type}.AsType 参数不支持指定为 object</value>
|
|
||||||
</data>
|
|
||||||
<data name="TypeError_CannotUse_IncludeMany" xml:space="preserve">
|
|
||||||
<value>类型 {typeofFullName} 错误,不能使用 IncludeMany</value>
|
|
||||||
</data>
|
|
||||||
<data name="Unable_Parse_Expression" xml:space="preserve">
|
|
||||||
<value>无法解析表达式:{exp}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Unable_Parse_ExpressionMethod" xml:space="preserve">
|
|
||||||
<value>无法解析表达式方法 {exp3tmpCallMethodName}</value>
|
|
||||||
</data>
|
|
||||||
<data name="Use_InsertDict_Method" xml:space="preserve">
|
|
||||||
<value>请使用 fsql.InsertDict(dict) 方法插入字典数据</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
|
||||||
@@ -1,281 +0,0 @@
|
|||||||
<#@ template hostspecific="true" #>
|
|
||||||
<#@ assembly name="System.Core" #>
|
|
||||||
<#@ assembly name="EnvDTE" #>
|
|
||||||
<#@ assembly name="System.Windows.Forms" #>
|
|
||||||
<#@ import namespace="System.Collections" #>
|
|
||||||
<#@ import namespace="System.Collections.Generic" #>
|
|
||||||
<#@ import namespace="System.ComponentModel.Design" #>
|
|
||||||
<#@ import namespace="System.IO" #>
|
|
||||||
<#@ import namespace="System.Linq" #>
|
|
||||||
<#@ import namespace="System.Resources" #>
|
|
||||||
<#@ import namespace="System.Text.RegularExpressions" #>
|
|
||||||
<#@ import namespace="EnvDTE" #>
|
|
||||||
<#@ import namespace="System.IO" #>
|
|
||||||
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
|
|
||||||
|
|
||||||
<#
|
|
||||||
var model = LoadResources();
|
|
||||||
#>
|
|
||||||
// <auto-generated />
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Resources;
|
|
||||||
using System.Globalization;
|
|
||||||
<#
|
|
||||||
if (!model.NoDiagnostics)
|
|
||||||
{
|
|
||||||
#>
|
|
||||||
using System.Threading;
|
|
||||||
<#
|
|
||||||
}
|
|
||||||
#>
|
|
||||||
|
|
||||||
namespace <#= model.Namespace #>
|
|
||||||
{
|
|
||||||
<#
|
|
||||||
if (model.Namespace.EndsWith("Internal")
|
|
||||||
|| model.AccessModifier == "internal")
|
|
||||||
{
|
|
||||||
#>
|
|
||||||
/// <summary>
|
|
||||||
/// This is an internal API that supports the FreeSql infrastructure and not subject to
|
|
||||||
/// the same compatibility standards as public APIs. It may be changed or removed without notice in
|
|
||||||
/// any release. You should only use it directly in your code with extreme caution and knowing that
|
|
||||||
/// doing so can result in application failures when updating to a new FreeSql release.
|
|
||||||
/// </summary>
|
|
||||||
<#
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#>
|
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// String resources used in FreeSql exceptions, etc.
|
|
||||||
/// </para>
|
|
||||||
/// <para>
|
|
||||||
/// These strings are exposed publicly for use by database providers and extensions.
|
|
||||||
/// It is unusual for application code to need these strings.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
<#
|
|
||||||
}
|
|
||||||
#>
|
|
||||||
<#= model.AccessModifier #> static class <#= model.Class #>
|
|
||||||
{
|
|
||||||
private static readonly ResourceManager _resourceManager = new ResourceManager("<#= model.ResourceName #>", typeof(<#= model.Class #>).Assembly);
|
|
||||||
|
|
||||||
private static CultureInfo _resourceCulture;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 重写当前线程的 CurrentUICulture 属性,对
|
|
||||||
/// 使用此强类型资源类的所有资源查找执行重写。
|
|
||||||
/// </summary>
|
|
||||||
public static CultureInfo Culture
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _resourceCulture;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_resourceCulture = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
<#
|
|
||||||
foreach (var resource in model.Resources)
|
|
||||||
{
|
|
||||||
#>
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
<#
|
|
||||||
foreach (var line in Lines(resource.Value))
|
|
||||||
{
|
|
||||||
#>
|
|
||||||
/// <#= Xml(line) #>
|
|
||||||
<#
|
|
||||||
}
|
|
||||||
#>
|
|
||||||
/// </summary>
|
|
||||||
<#
|
|
||||||
if (resource.Obsolete)
|
|
||||||
{
|
|
||||||
#>
|
|
||||||
[Obsolete]
|
|
||||||
<#
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resource.Parameters.Any())
|
|
||||||
{
|
|
||||||
#>
|
|
||||||
public static string <#= resource.Name #>(<#= List("object ", resource.Parameters.Select(e => e.ParamString)) #>)
|
|
||||||
=> string.Format(
|
|
||||||
GetString("<#= resource.Name #>", <#= List(resource.Parameters.Select(e => e.NameOfString)) #>),
|
|
||||||
<#= List(resource.Parameters.Select(e => e.ParamString)) #>);
|
|
||||||
<#
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#>
|
|
||||||
public static string <#= resource.Name #>
|
|
||||||
=> GetString("<#= resource.Name #>");
|
|
||||||
<#
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#>
|
|
||||||
|
|
||||||
private static string GetString(string name, params string[] formatterNames)
|
|
||||||
{
|
|
||||||
var value = _resourceManager.GetString(name,_resourceCulture);
|
|
||||||
for (var i = 0; i < formatterNames.Length; i++)
|
|
||||||
{
|
|
||||||
value = value.Replace("{" + formatterNames[i] + "}", "{" + i + "}");
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
<#+
|
|
||||||
ResourceFile LoadResources()
|
|
||||||
{
|
|
||||||
var result = new ResourceFile();
|
|
||||||
|
|
||||||
if (Session.ContainsKey("AccessModifier"))
|
|
||||||
{
|
|
||||||
result.AccessModifier = (string)Session["AccessModifier"];
|
|
||||||
};
|
|
||||||
|
|
||||||
var services = (IServiceProvider)Host;
|
|
||||||
var dte = (DTE)services.GetCOMService(typeof(DTE));
|
|
||||||
if (!Session.TryGetValue("NoDiagnostics", out var noDiagnostics))
|
|
||||||
{
|
|
||||||
noDiagnostics = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
result.NoDiagnostics = (bool)noDiagnostics;
|
|
||||||
|
|
||||||
var resourceFile = (string)Session["ResourceFile"];
|
|
||||||
if (!Path.IsPathRooted(resourceFile))
|
|
||||||
{
|
|
||||||
resourceFile = Host.ResolvePath(resourceFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
var resourceProjectItem = dte.Solution.FindProjectItem(resourceFile);
|
|
||||||
var templateProjectItem = dte.Solution.FindProjectItem(Host.TemplateFile);
|
|
||||||
var project = templateProjectItem.ContainingProject;
|
|
||||||
var rootNamespace = (string)project.Properties.Item("RootNamespace").Value;
|
|
||||||
var resourceDir = Path.GetDirectoryName(resourceFile);
|
|
||||||
var projectDir = (string)project.Properties.Item("FullPath").Value;
|
|
||||||
var resourceNamespace = rootNamespace + "." + resourceDir.Substring(projectDir.Length)
|
|
||||||
.Replace(Path.DirectorySeparatorChar, '.');
|
|
||||||
|
|
||||||
result.Namespace = (string)resourceProjectItem.Properties.Item("CustomToolNamespace")?.Value;
|
|
||||||
if (string.IsNullOrEmpty(result.Namespace))
|
|
||||||
{
|
|
||||||
result.Namespace = resourceNamespace;
|
|
||||||
}
|
|
||||||
|
|
||||||
result.Class = Path.GetFileNameWithoutExtension(resourceFile);
|
|
||||||
|
|
||||||
result.ResourceName = resourceNamespace + "." + result.Class;
|
|
||||||
if(File.Exists(resourceFile.Replace(".resx", ".zh-Hans.resx")))
|
|
||||||
{
|
|
||||||
resourceFile = resourceFile.Replace(".resx", ".zh-Hans.resx");
|
|
||||||
}
|
|
||||||
List<ResXDataNode> sortedResources;
|
|
||||||
using (var reader = new ResXResourceReader(resourceFile))
|
|
||||||
{
|
|
||||||
reader.UseResXDataNodes = true;
|
|
||||||
sortedResources = Enumerable.ToList(
|
|
||||||
from DictionaryEntry r in reader
|
|
||||||
orderby r.Key
|
|
||||||
select (ResXDataNode)r.Value);
|
|
||||||
|
|
||||||
result.Resources = sortedResources
|
|
||||||
.Select(r => new Resource(r))
|
|
||||||
.ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
using (var writer = new ResXResourceWriter(resourceFile))
|
|
||||||
{
|
|
||||||
foreach (var node in sortedResources)
|
|
||||||
writer.AddResource(node);
|
|
||||||
|
|
||||||
writer.Generate();
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
IEnumerable<string> Lines(string value)
|
|
||||||
=> value.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
|
|
||||||
|
|
||||||
string Xml(string value)
|
|
||||||
=> value.Replace("<", "<").Replace(">", ">");
|
|
||||||
|
|
||||||
string List(IEnumerable<string> items)
|
|
||||||
=> List(null, items);
|
|
||||||
|
|
||||||
string List(string prefix, IEnumerable<string> items, string suffix = null)
|
|
||||||
=> string.Join(", ", items.Select(i => prefix + i + suffix));
|
|
||||||
|
|
||||||
class ResourceFile
|
|
||||||
{
|
|
||||||
public string Namespace { get; set; }
|
|
||||||
public string AccessModifier { get; set; } = "public";
|
|
||||||
public string Class { get; set; }
|
|
||||||
public string ResourceName { get; set; }
|
|
||||||
public IEnumerable<Resource> Resources { get; set; }
|
|
||||||
public bool NoDiagnostics { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
class Resource
|
|
||||||
{
|
|
||||||
public Resource(ResXDataNode node)
|
|
||||||
{
|
|
||||||
Name = node.Name;
|
|
||||||
Value = (string)node.GetValue((ITypeResolutionService)null);
|
|
||||||
var parameters = Regex.Matches(Value, @"\{(\w+)\}")
|
|
||||||
.Cast<Match>()
|
|
||||||
.Select(m => m.Groups[1].Value)
|
|
||||||
.Distinct()
|
|
||||||
.Select(n => ("nameof(" + n + ")", n))
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
foreach (var parameter in parameters.ToList())
|
|
||||||
{
|
|
||||||
var rawString = parameter.Item2;
|
|
||||||
var underscoreIndex = rawString.IndexOf('_');
|
|
||||||
if (underscoreIndex > 0)
|
|
||||||
{
|
|
||||||
var newIndex = int.Parse(rawString.Substring(0, underscoreIndex));
|
|
||||||
parameters[newIndex] = ("\"" + rawString + "\"", rawString.Substring(underscoreIndex + 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Parameters = parameters;
|
|
||||||
|
|
||||||
var eventInfo = node.Comment.Split(' ');
|
|
||||||
var argumentsRead = 0;
|
|
||||||
if (eventInfo.FirstOrDefault() == "Obsolete")
|
|
||||||
{
|
|
||||||
Obsolete = true;
|
|
||||||
argumentsRead++;
|
|
||||||
}
|
|
||||||
|
|
||||||
Level = eventInfo.Skip(argumentsRead++).FirstOrDefault() ?? "BadLevel";
|
|
||||||
EventId = eventInfo.Skip(argumentsRead++).FirstOrDefault() ?? "BadEventId";
|
|
||||||
Types = eventInfo.Skip(argumentsRead++).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Name { get; }
|
|
||||||
public string Value { get; }
|
|
||||||
public string EventId { get; }
|
|
||||||
public string Level { get; }
|
|
||||||
public bool Obsolete { get; }
|
|
||||||
public IEnumerable<(string NameOfString, string ParamString)> Parameters { get; }
|
|
||||||
public IEnumerable<string> Types { get; }
|
|
||||||
}
|
|
||||||
#>
|
|
||||||
@@ -30,14 +30,14 @@ namespace FreeSql.ClickHouse
|
|||||||
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
|
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
|
||||||
if (!string.IsNullOrEmpty(masterConnectionString))
|
if (!string.IsNullOrEmpty(masterConnectionString))
|
||||||
MasterPool = isAdoPool ?
|
MasterPool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new ClickHouseConnection(masterConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new ClickHouseConnection(masterConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new ClickHouseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
|
new ClickHouseConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null);
|
||||||
|
|
||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new ClickHouseConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new ClickHouseConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new ClickHouseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new ClickHouseConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ namespace FreeSql.ClickHouse
|
|||||||
{
|
{
|
||||||
|
|
||||||
internal ClickHouseConnectionPool _pool;
|
internal ClickHouseConnectionPool _pool;
|
||||||
public string Name { get; set; } = $"ClickHouse ClickHouseConnection {CoreStrings.S_ObjectPool}";
|
public string Name { get; set; } = $"ClickHouse ClickHouseConnection {CoreErrorStrings.S_ObjectPool}";
|
||||||
public int PoolSize { get; set; } = 100;
|
public int PoolSize { get; set; } = 100;
|
||||||
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
|
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
|
||||||
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
|
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
|
||||||
@@ -131,8 +131,8 @@ namespace FreeSql.ClickHouse
|
|||||||
{
|
{
|
||||||
if (obj.Value == null)
|
if (obj.Value == null)
|
||||||
{
|
{
|
||||||
_pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
|
_pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
|
||||||
throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
|
throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
|
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
|
||||||
@@ -161,8 +161,8 @@ namespace FreeSql.ClickHouse
|
|||||||
{
|
{
|
||||||
if (obj.Value == null)
|
if (obj.Value == null)
|
||||||
{
|
{
|
||||||
_pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
|
_pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
|
||||||
throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
|
throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
|
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
|
||||||
|
|||||||
@@ -173,9 +173,9 @@ namespace FreeSql.ClickHouse
|
|||||||
sb.Append("\r\n");
|
sb.Append("\r\n");
|
||||||
var tb = obj.tableSchema;
|
var tb = obj.tableSchema;
|
||||||
if (tb == null)
|
if (tb == null)
|
||||||
throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName));
|
throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName));
|
||||||
if (tb.Columns.Any() == false)
|
if (tb.Columns.Any() == false)
|
||||||
throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName));
|
throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName));
|
||||||
var tbname = _commonUtils.SplitTableName(tb.DbName);
|
var tbname = _commonUtils.SplitTableName(tb.DbName);
|
||||||
if (tbname?.Length == 1)
|
if (tbname?.Length == 1)
|
||||||
tbname = new[] { database, tbname[0] };
|
tbname = new[] { database, tbname[0] };
|
||||||
|
|||||||
@@ -299,7 +299,7 @@ namespace FreeSql.ClickHouse
|
|||||||
return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null);
|
return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null);
|
||||||
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null);
|
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null);
|
||||||
case "Format":
|
case "Format":
|
||||||
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0]));
|
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0]));
|
||||||
if (exp.Arguments.Count == 1) return ExpressionLambdaToSql(exp.Arguments[0], tsc);
|
if (exp.Arguments.Count == 1) return ExpressionLambdaToSql(exp.Arguments[0], tsc);
|
||||||
var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
|
var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
|
||||||
(exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
|
(exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
|
||||||
@@ -461,7 +461,6 @@ namespace FreeSql.ClickHouse
|
|||||||
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
||||||
{
|
{
|
||||||
case "System.DateTime": return $"dateDiff(second, {args1}, toDateTime({left}))";
|
case "System.DateTime": return $"dateDiff(second, {args1}, toDateTime({left}))";
|
||||||
case "System.TimeSpan": return $"addSeconds(toDateTime({left}),(({args1})*-1))";
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "Equals": return $"({left} = {args1})";
|
case "Equals": return $"({left} = {args1})";
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace FreeSql.ClickHouse.Curd
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
|
public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
|
|
||||||
public override string ToSql()
|
public override string ToSql()
|
||||||
{
|
{
|
||||||
@@ -59,7 +59,7 @@ namespace FreeSql.ClickHouse.Curd
|
|||||||
|
|
||||||
#if net40
|
#if net40
|
||||||
#else
|
#else
|
||||||
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
|
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
|
|
||||||
async public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default)
|
async public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ namespace FreeSql.ClickHouse.Curd
|
|||||||
public override int ExecuteAffrows() => SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
|
public override int ExecuteAffrows() => SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
|
||||||
protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
|
protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
|
||||||
|
|
||||||
protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
|
protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@@ -280,7 +280,7 @@ namespace FreeSql.ClickHouse.Curd
|
|||||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
|
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
|
||||||
protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
|
protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
|
||||||
|
|
||||||
protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
|
protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
|
|
||||||
async protected override Task SplitExecuteAsync(int valuesLimit, int parameterLimit, string traceName, Func<Task> executeAsync, CancellationToken cancellationToken = default)
|
async protected override Task SplitExecuteAsync(int valuesLimit, int parameterLimit, string traceName, Func<Task> executeAsync, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<SignAssembly>False</SignAssembly>
|
<SignAssembly>False</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>false</DelaySign>
|
<DelaySign>false</DelaySign>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ namespace FreeSql.Custom
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
|
public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
|
|
||||||
#if net40
|
#if net40
|
||||||
#else
|
#else
|
||||||
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
|
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ namespace FreeSql.Custom
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override List<T1> RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
|
protected override List<T1> RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
|
|
||||||
#if net40
|
#if net40
|
||||||
#else
|
#else
|
||||||
@@ -107,7 +107,7 @@ namespace FreeSql.Custom
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
|
protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -38,7 +38,7 @@ namespace FreeSql.Custom
|
|||||||
if (_limit > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" ");
|
if (_limit > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" ");
|
||||||
sb.Append(field);
|
sb.Append(field);
|
||||||
if (_skip > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top)
|
if (_skip > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top)
|
||||||
throw new NotImplementedException(CoreStrings.S_NotImplementSkipOffset("Custom"));
|
throw new NotImplementedException(CoreErrorStrings.S_NotImplementSkipOffset("Custom"));
|
||||||
|
|
||||||
sb.Append(" \r\nFROM ");
|
sb.Append(" \r\nFROM ");
|
||||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace FreeSql.Custom
|
|||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
|
||||||
protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns);
|
protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns);
|
||||||
|
|
||||||
protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
|
protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@@ -65,7 +65,7 @@ namespace FreeSql.Custom
|
|||||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
|
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
|
||||||
protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns, cancellationToken);
|
protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns, cancellationToken);
|
||||||
|
|
||||||
protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
|
protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,7 +150,6 @@ namespace FreeSql.Custom
|
|||||||
public virtual string LambdaDateTime_AddTicks(string operand, string value) => $"dateadd(second, ({value})/10000000, {operand})";
|
public virtual string LambdaDateTime_AddTicks(string operand, string value) => $"dateadd(second, ({value})/10000000, {operand})";
|
||||||
public virtual string LambdaDateTime_AddYears(string operand, string value) => $"dateadd(year, {value}, {operand})";
|
public virtual string LambdaDateTime_AddYears(string operand, string value) => $"dateadd(year, {value}, {operand})";
|
||||||
public virtual string LambdaDateTime_Subtract(string operand, string value) => $"datediff(second, {value}, {operand})";
|
public virtual string LambdaDateTime_Subtract(string operand, string value) => $"datediff(second, {value}, {operand})";
|
||||||
public virtual string LambdaDateTime_SubtractTimeSpan(string operand, string value) => $"dateadd(second, ({value})*-1, {operand})";
|
|
||||||
public virtual string LambdaDateTime_Equals(string operand, string value) => $"({operand} = {value})";
|
public virtual string LambdaDateTime_Equals(string operand, string value) => $"({operand} = {value})";
|
||||||
public virtual string LambdaDateTime_CompareTo(string operand, string value) => $"datediff(second,{value},{operand})";
|
public virtual string LambdaDateTime_CompareTo(string operand, string value) => $"datediff(second,{value},{operand})";
|
||||||
public virtual string LambdaDateTime_ToString(string operand) => $"convert(varchar, {operand}, 121)";
|
public virtual string LambdaDateTime_ToString(string operand) => $"convert(varchar, {operand}, 121)";
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace FreeSql.Custom
|
|||||||
_CreateParameterCommand = CreateCommand();
|
_CreateParameterCommand = CreateCommand();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
throw new Exception(CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory);
|
throw new Exception(CoreErrorStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory);
|
||||||
}
|
}
|
||||||
CustomAdapter Adapter => (_util == null ? FreeSqlCustomAdapterGlobalExtensions.DefaultAdapter : _util._orm.GetCustomAdapter());
|
CustomAdapter Adapter => (_util == null ? FreeSqlCustomAdapterGlobalExtensions.DefaultAdapter : _util._orm.GetCustomAdapter());
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ namespace FreeSql.Custom
|
|||||||
cmd.Connection = null;
|
cmd.Connection = null;
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
throw new Exception(CoreStrings.S_CustomAdapter_Cannot_Use_CreateCommand);
|
throw new Exception(CoreErrorStrings.S_CustomAdapter_Cannot_Use_CreateCommand);
|
||||||
}
|
}
|
||||||
public DbParameter CreateParameter()
|
public DbParameter CreateParameter()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -90,6 +90,6 @@ namespace FreeSql.Custom
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override string GetComparisonDDLStatements(params TypeSchemaAndName[] objects) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
|
protected override string GetComparisonDDLStatements(params TypeSchemaAndName[] objects) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -365,7 +365,6 @@ namespace FreeSql.Custom
|
|||||||
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
||||||
{
|
{
|
||||||
case "System.DateTime": return _utils.Adapter.LambdaDateTime_Subtract(left, args1);
|
case "System.DateTime": return _utils.Adapter.LambdaDateTime_Subtract(left, args1);
|
||||||
case "System.TimeSpan": return _utils.Adapter.LambdaDateTime_SubtractTimeSpan(left, args1);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "Equals": return _utils.Adapter.LambdaDateTime_Equals(left, args1);
|
case "Equals": return _utils.Adapter.LambdaDateTime_Equals(left, args1);
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ namespace FreeSql.Custom
|
|||||||
public override IInsert<T1> CreateInsertProvider<T1>() => new CustomInsert<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression);
|
public override IInsert<T1> CreateInsertProvider<T1>() => new CustomInsert<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression);
|
||||||
public override IUpdate<T1> CreateUpdateProvider<T1>(object dywhere) => new CustomUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
public override IUpdate<T1> CreateUpdateProvider<T1>(object dywhere) => new CustomUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
||||||
public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new CustomDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new CustomDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
||||||
public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
|
public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
|
|
||||||
public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
|
public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}");
|
||||||
|
|
||||||
public CustomProvider(string masterConnectionString, string[] slaveConnectionString, Func<DbConnection> connectionFactory = null)
|
public CustomProvider(string masterConnectionString, string[] slaveConnectionString, Func<DbConnection> connectionFactory = null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>false</DelaySign>
|
<DelaySign>false</DelaySign>
|
||||||
<Version>3.5.100-preview20240825</Version>
|
<Version>3.5.100-preview20241128</Version>
|
||||||
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
<PackageReadmeFile>readme.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ namespace FreeSql.Custom.MySql
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName));
|
if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName));
|
||||||
sql = insert.ToSqlValuesOrSelectUnionAll();
|
sql = insert.ToSqlValuesOrSelectUnionAll();
|
||||||
if (sql?.StartsWith("INSERT INTO ") == true)
|
if (sql?.StartsWith("INSERT INTO ") == true)
|
||||||
sql = $"INSERT IGNORE INTO {sql.Substring(12)}";
|
sql = $"INSERT IGNORE INTO {sql.Substring(12)}";
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace FreeSql.Custom.MySql
|
|||||||
public CustomMySqlOnDuplicateKeyUpdate(IInsert<T1> insert)
|
public CustomMySqlOnDuplicateKeyUpdate(IInsert<T1> insert)
|
||||||
{
|
{
|
||||||
_mysqlInsert = insert as CustomMySqlInsert<T1>;
|
_mysqlInsert = insert as CustomMySqlInsert<T1>;
|
||||||
if (_mysqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnDuplicateKeyUpdate", "Odbc/MySql"));
|
if (_mysqlInsert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("OnDuplicateKeyUpdate", "Odbc/MySql"));
|
||||||
if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu";
|
if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace FreeSql.Custom.MySql
|
|||||||
MasterPool = pool;
|
MasterPool = pool;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
throw new Exception(CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory);
|
throw new Exception(CoreErrorStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory);
|
||||||
}
|
}
|
||||||
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
|
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
|
||||||
{
|
{
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user