- rename ZoreEntity to ZeroEntity

This commit is contained in:
2881099 2023-12-21 16:26:23 +08:00
parent bf92f09b9e
commit 8a70974bb8
12 changed files with 68 additions and 68 deletions

View File

@ -1,7 +1,7 @@
 
using FreeSql; using FreeSql;
using FreeSql.DataAnnotations; using FreeSql.DataAnnotations;
using FreeSql.Extensions.ZoreEntity; using FreeSql.Extensions.ZeroEntity;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
@ -17,7 +17,7 @@ using (var fsql = new FreeSqlBuilder()
{ {
var json = JsonConvert.SerializeObject(Helper.GetTestDesc()); var json = JsonConvert.SerializeObject(Helper.GetTestDesc());
var dyctx = new ZoreDbContext(fsql, JsonConvert.DeserializeObject<TableDescriptor[]>(@" var dyctx = new ZeroDbContext(fsql, JsonConvert.DeserializeObject<TableDescriptor[]>(@"
[ [
{ {
""Name"":""User"", ""Name"":""User"",

View File

@ -12,7 +12,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\Extensions\FreeSql.Extensions.ZoreEntity\FreeSql.Extensions.ZoreEntity.csproj" /> <ProjectReference Include="..\..\Extensions\FreeSql.Extensions.ZeroEntity\FreeSql.Extensions.ZeroEntity.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj" /> <ProjectReference Include="..\..\Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj" />
</ItemGroup> </ItemGroup>

View File

@ -28,7 +28,7 @@
</ItemGroup> </ItemGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|netstandard2.0|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|netstandard2.0|AnyCPU'">
<DocumentationFile>FreeSql.Extensions.ZoreEntity.xml</DocumentationFile> <DocumentationFile>FreeSql.Extensions.ZeroEntity.xml</DocumentationFile>
<WarningLevel>3</WarningLevel> <WarningLevel>3</WarningLevel>
</PropertyGroup> </PropertyGroup>

View File

@ -1,64 +1,64 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<doc> <doc>
<assembly> <assembly>
<name>FreeSql.Extensions.ZoreEntity</name> <name>FreeSql.Extensions.ZeroEntity</name>
</assembly> </assembly>
<members> <members>
<member name="P:FreeSql.Extensions.ZoreEntity.ZoreDbContext.Select"> <member name="P:FreeSql.Extensions.ZeroEntity.ZeroDbContext.Select">
<summary> <summary>
【有状态管理】自动 Include 查询 【有状态管理】自动 Include 查询
</summary> </summary>
</member> </member>
<member name="M:FreeSql.Extensions.ZoreEntity.ZoreDbContext.SelectNoTracking(System.String)"> <member name="M:FreeSql.Extensions.ZeroEntity.ZeroDbContext.SelectNoTracking(System.String)">
<summary> <summary>
【无状态管理】指定表查询 【无状态管理】指定表查询
</summary> </summary>
</member> </member>
<member name="P:FreeSql.Extensions.ZoreEntity.ZoreDbContext.ChangeReport.ChangeInfo.BeforeObject"> <member name="P:FreeSql.Extensions.ZeroEntity.ZeroDbContext.ChangeReport.ChangeInfo.BeforeObject">
<summary> <summary>
Type = Update 的时候,获取更新之前的对象 Type = Update 的时候,获取更新之前的对象
</summary> </summary>
</member> </member>
<member name="P:FreeSql.Extensions.ZoreEntity.ZoreDbContext.ChangeReport.Report"> <member name="P:FreeSql.Extensions.ZeroEntity.ZeroDbContext.ChangeReport.Report">
<summary> <summary>
实体变化记录 实体变化记录
</summary> </summary>
</member> </member>
<member name="P:FreeSql.Extensions.ZoreEntity.ZoreDbContext.ChangeReport.OnChange"> <member name="P:FreeSql.Extensions.ZeroEntity.ZeroDbContext.ChangeReport.OnChange">
<summary> <summary>
实体变化事件 实体变化事件
</summary> </summary>
</member> </member>
<member name="M:FreeSql.Extensions.ZoreEntity.ZoreDbContext.SelectImpl.LeftJoin(System.String,System.String[])"> <member name="M:FreeSql.Extensions.ZeroEntity.ZeroDbContext.SelectImpl.LeftJoin(System.String,System.String[])">
<summary> <summary>
举例1LeftJoin("table1", "id", "user.id") -> LEFT JOIN [table1] b ON b.[id] = a.[id]<para></para> 举例1LeftJoin("table1", "id", "user.id") -> LEFT JOIN [table1] b ON b.[id] = a.[id]<para></para>
举例2LeftJoin("table1", "id", "user.id", "xid", "user.xid") -> LEFT JOIN [table1] b ON b.[id] = [a].id] AND b.[xid] = a.[xid] 举例2LeftJoin("table1", "id", "user.id", "xid", "user.xid") -> LEFT JOIN [table1] b ON b.[id] = [a].id] AND b.[xid] = a.[xid]
</summary> </summary>
</member> </member>
<member name="M:FreeSql.Extensions.ZoreEntity.ZoreDbContext.SelectImpl.InnerJoin(System.String,System.String[])"> <member name="M:FreeSql.Extensions.ZeroEntity.ZeroDbContext.SelectImpl.InnerJoin(System.String,System.String[])">
<summary> <summary>
举例1InnerJoin("table1", "id", "user.id") -> INNER JOIN [table1] b ON b.[id] = a.[id]<para></para> 举例1InnerJoin("table1", "id", "user.id") -> INNER JOIN [table1] b ON b.[id] = a.[id]<para></para>
举例2InnerJoin("table1", "id", "user.id", "xid", "user.xid") -> INNER JOIN [table1] b ON b.[id] = [a].id] AND b.[xid] = a.[xid] 举例2InnerJoin("table1", "id", "user.id", "xid", "user.xid") -> INNER JOIN [table1] b ON b.[id] = [a].id] AND b.[xid] = a.[xid]
</summary> </summary>
</member> </member>
<member name="M:FreeSql.Extensions.ZoreEntity.ZoreDbContext.SelectImpl.RightJoin(System.String,System.String[])"> <member name="M:FreeSql.Extensions.ZeroEntity.ZeroDbContext.SelectImpl.RightJoin(System.String,System.String[])">
<summary> <summary>
举例1RightJoin("table1", "id", "user.id") -> RIGTH JOIN [table1] b ON b.[id] = a.[id]<para></para> 举例1RightJoin("table1", "id", "user.id") -> RIGTH JOIN [table1] b ON b.[id] = a.[id]<para></para>
举例2RightJoin("table1", "id", "user.id", "xid", "user.xid") -> RIGTH JOIN [table1] b ON b.[id] = [a].id] AND b.[xid] = a.[xid] 举例2RightJoin("table1", "id", "user.id", "xid", "user.xid") -> RIGTH JOIN [table1] b ON b.[id] = [a].id] AND b.[xid] = a.[xid]
</summary> </summary>
</member> </member>
<member name="M:FreeSql.Extensions.ZoreEntity.ZoreDbContext.SelectImpl.Where(System.Collections.Generic.IEnumerable{System.Collections.Generic.Dictionary{System.String,System.Object}})"> <member name="M:FreeSql.Extensions.ZeroEntity.ZeroDbContext.SelectImpl.Where(System.Collections.Generic.IEnumerable{System.Collections.Generic.Dictionary{System.String,System.Object}})">
<summary> <summary>
WHERE [Id] IN (...) WHERE [Id] IN (...)
</summary> </summary>
</member> </member>
<member name="M:FreeSql.Extensions.ZoreEntity.ZoreDbContext.SelectImpl.Where(System.Object)"> <member name="M:FreeSql.Extensions.ZeroEntity.ZeroDbContext.SelectImpl.Where(System.Object)">
<summary> <summary>
Where(new { Year = 2017, CategoryId = 198, IsPublished = true })<para></para> Where(new { Year = 2017, CategoryId = 198, IsPublished = true })<para></para>
WHERE [Year] = 2017 AND [CategoryId] = 198 AND [IsPublished] = 1 WHERE [Year] = 2017 AND [CategoryId] = 198 AND [IsPublished] = 1
</summary> </summary>
</member> </member>
<member name="M:FreeSql.Extensions.ZoreEntity.ZoreDbContext.SelectImpl.Where(System.String,System.Object)"> <member name="M:FreeSql.Extensions.ZeroEntity.ZeroDbContext.SelectImpl.Where(System.String,System.Object)">
<summary> <summary>
WHERE [field] = .. WHERE [field] = ..
</summary> </summary>

View File

@ -10,15 +10,15 @@ using System.Linq;
using System.Text; using System.Text;
using T = System.Collections.Generic.Dictionary<string, object>; using T = System.Collections.Generic.Dictionary<string, object>;
namespace FreeSql.Extensions.ZoreEntity namespace FreeSql.Extensions.ZeroEntity
{ {
partial class ZoreDbContext partial class ZeroDbContext
{ {
public class SelectImpl public class SelectImpl
{ {
ZoreDbContext _dbcontext; ZeroDbContext _dbcontext;
IFreeSql _orm => _dbcontext._orm; IFreeSql _orm => _dbcontext._orm;
List<ZoreTableInfo> _tables => _dbcontext._tables; List<ZeroTableInfo> _tables => _dbcontext._tables;
int _mainTableIndex = -1; int _mainTableIndex = -1;
List<TableAliasInfo> _tableAlias; List<TableAliasInfo> _tableAlias;
ISelect<TestDynamicFilterInfo> _select; ISelect<TestDynamicFilterInfo> _select;
@ -33,7 +33,7 @@ namespace FreeSql.Extensions.ZoreEntity
bool _includeAll = false; bool _includeAll = false;
SelectImpl() { } SelectImpl() { }
internal SelectImpl(ZoreDbContext dbcontext, string tableName) internal SelectImpl(ZeroDbContext dbcontext, string tableName)
{ {
_dbcontext = dbcontext; _dbcontext = dbcontext;
var tableIndex = _tables.FindIndex(a => a.CsName.ToLower() == tableName?.ToLower()); var tableIndex = _tables.FindIndex(a => a.CsName.ToLower() == tableName?.ToLower());
@ -61,7 +61,7 @@ namespace FreeSql.Extensions.ZoreEntity
LocalAutoInclude(_tables[_mainTableIndex], "a"); LocalAutoInclude(_tables[_mainTableIndex], "a");
return this; return this;
void LocalAutoInclude(ZoreTableInfo table, string alias, string navPath = "") void LocalAutoInclude(ZeroTableInfo table, string alias, string navPath = "")
{ {
if (ignores.ContainsKey(table.CsName)) return; if (ignores.ContainsKey(table.CsName)) return;
ignores.Add(table.CsName, true); ignores.Add(table.CsName, true);
@ -179,7 +179,7 @@ namespace FreeSql.Extensions.ZoreEntity
class TableAliasInfo class TableAliasInfo
{ {
public string Alias { get; set; } public string Alias { get; set; }
public ZoreTableInfo Table { get; set; } public ZeroTableInfo Table { get; set; }
public string[] NavPath { get; set; } public string[] NavPath { get; set; }
public List<NativeTuple<string, Action<SelectImpl>>> IncludeMany { get; set; } = new List<NativeTuple<string, Action<SelectImpl>>>(); public List<NativeTuple<string, Action<SelectImpl>>> IncludeMany { get; set; } = new List<NativeTuple<string, Action<SelectImpl>>>();
} }
@ -200,7 +200,7 @@ namespace FreeSql.Extensions.ZoreEntity
return alias; return alias;
} }
} }
TableAliasInfo FlagFetchResult(ZoreTableInfo table, string alias, string navPath) TableAliasInfo FlagFetchResult(ZeroTableInfo table, string alias, string navPath)
{ {
var tableAlias = _tableAlias.Where(a => a.Alias == alias).FirstOrDefault(); var tableAlias = _tableAlias.Where(a => a.Alias == alias).FirstOrDefault();
if (tableAlias == null) if (tableAlias == null)
@ -533,7 +533,7 @@ namespace FreeSql.Extensions.ZoreEntity
return this; return this;
} }
NativeTuple<string, ColumnInfo> ParseField(ZoreTableInfo firstTable, string firstTableAlias, string property) NativeTuple<string, ColumnInfo> ParseField(ZeroTableInfo firstTable, string firstTableAlias, string property)
{ {
if (string.IsNullOrEmpty(property)) return null; if (string.IsNullOrEmpty(property)) return null;
var field = property.Split('.').Select(a => a.Trim()).ToArray(); var field = property.Split('.').Select(a => a.Trim()).ToArray();

View File

@ -11,7 +11,7 @@ using System.Linq;
using System.Reflection; using System.Reflection;
using T = System.Collections.Generic.Dictionary<string, object>; using T = System.Collections.Generic.Dictionary<string, object>;
namespace FreeSql.Extensions.ZoreEntity namespace FreeSql.Extensions.ZeroEntity
{ {
/* /*
@ -58,13 +58,13 @@ OneToMany 级联删除
ManyToOne ManyToOne
ManyToMany ManyToMany
*/ */
public partial class ZoreDbContext public partial class ZeroDbContext
{ {
internal IFreeSql _orm; internal IFreeSql _orm;
internal DbTransaction _transaction; internal DbTransaction _transaction;
internal int _commandTimeout; internal int _commandTimeout;
internal List<ZoreTableInfo> _tables; internal List<ZeroTableInfo> _tables;
public ZoreDbContext(IFreeSql orm, TableDescriptor[] schemas) public ZeroDbContext(IFreeSql orm, TableDescriptor[] schemas)
{ {
_orm = orm; _orm = orm;
_tables = VilidateSchemaToInfo(orm, schemas); _tables = VilidateSchemaToInfo(orm, schemas);
@ -80,10 +80,10 @@ ManyToMany 级联删除中间表(注意不删除外部根)
_orm.CodeFirst.SyncStructure(table, table.DbName, false); _orm.CodeFirst.SyncStructure(table, table.DbName, false);
} }
static List<ZoreTableInfo> VilidateSchemaToInfo(IFreeSql orm, IEnumerable<TableDescriptor> schemas) static List<ZeroTableInfo> VilidateSchemaToInfo(IFreeSql orm, IEnumerable<TableDescriptor> schemas)
{ {
var common = (orm.Ado as AdoProvider)._util; var common = (orm.Ado as AdoProvider)._util;
var tables = new List<ZoreTableInfo>(); var tables = new List<ZeroTableInfo>();
foreach (var dtd in schemas) foreach (var dtd in schemas)
{ {
if (string.IsNullOrWhiteSpace(dtd.Name)) continue; if (string.IsNullOrWhiteSpace(dtd.Name)) continue;
@ -97,7 +97,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
{ {
IndexMethod = a.IndexMethod, IndexMethod = a.IndexMethod,
}); });
var tab = new ZoreTableInfo(); var tab = new ZeroTableInfo();
tab.Comment = dtd.Comment; tab.Comment = dtd.Comment;
tab.Type = typeof(object); tab.Type = typeof(object);
tab.CsName = dtd.Name; tab.CsName = dtd.Name;
@ -137,7 +137,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
{ {
if (tab.Navigates.ContainsKey(dtdnav.Name)) continue; if (tab.Navigates.ContainsKey(dtdnav.Name)) continue;
var error = $"表“{tab.CsName}”导航属性 {dtdnav.Name} 配置错误:"; var error = $"表“{tab.CsName}”导航属性 {dtdnav.Name} 配置错误:";
var nav = new ZoreTableRef(); var nav = new ZeroTableRef();
nav.NavigateKey = dtdnav.Name; nav.NavigateKey = dtdnav.Name;
nav.Table = tab; nav.Table = tab;
nav.RefTable = tables.Where(a => a.CsName == dtdnav.RelTable).FirstOrDefault(); nav.RefTable = tables.Where(a => a.CsName == dtdnav.RelTable).FirstOrDefault();
@ -210,12 +210,12 @@ ManyToMany 级联删除中间表(注意不删除外部根)
return tables; return tables;
} }
public ZoreDbContext WithTransaction(DbTransaction value) public ZeroDbContext WithTransaction(DbTransaction value)
{ {
_transaction = value; _transaction = value;
return this; return this;
} }
public ZoreDbContext CommandTimeout(int seconds) public ZeroDbContext CommandTimeout(int seconds)
{ {
_commandTimeout = seconds; _commandTimeout = seconds;
return this; return this;
@ -334,18 +334,18 @@ ManyToMany 级联删除中间表(注意不删除外部根)
AttachCascade(_tables[0], entity, true); AttachCascade(_tables[0], entity, true);
} }
void AuditCascade(ZoreTableInfo entityTable, IEnumerable<T> entities) void AuditCascade(ZeroTableInfo entityTable, IEnumerable<T> entities)
{ {
if (entities == null) return; if (entities == null) return;
foreach (var entity in entities) AuditCascade(entityTable, entity); foreach (var entity in entities) AuditCascade(entityTable, entity);
} }
internal void AuditCascade(ZoreTableInfo entityTable, T entity) internal void AuditCascade(ZeroTableInfo entityTable, T entity)
{ {
var ignores = new Dictionary<string, Dictionary<string, bool>>(); //比如 Tree 结构可以递归添加 var ignores = new Dictionary<string, Dictionary<string, bool>>(); //比如 Tree 结构可以递归添加
LocalAuditCascade(entityTable, entity); LocalAuditCascade(entityTable, entity);
ignores.Clear(); ignores.Clear();
void LocalAuditCascade(ZoreTableInfo table, T entityFrom) void LocalAuditCascade(ZeroTableInfo table, T entityFrom)
{ {
if (entityFrom == null) return; if (entityFrom == null) return;
@ -550,7 +550,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
} }
return false; return false;
} }
void InsertCascade(ZoreTableInfo entityTable, IEnumerable<T> entities, bool cascade) void InsertCascade(ZeroTableInfo entityTable, IEnumerable<T> entities, bool cascade)
{ {
var navs = entityTable.Navigates.OrderBy(a => a.Value.RefType).ThenBy(a => a.Key).ToArray(); var navs = entityTable.Navigates.OrderBy(a => a.Value.RefType).ThenBy(a => a.Key).ToArray();
SaveOutsideCascade(entities, navs); SaveOutsideCascade(entities, navs);
@ -791,7 +791,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
#endregion #endregion
} }
void SaveOutsideCascade(IEnumerable<T> entities, IEnumerable<KeyValuePair<string, ZoreTableRef>> navs) void SaveOutsideCascade(IEnumerable<T> entities, IEnumerable<KeyValuePair<string, ZeroTableRef>> navs)
{ {
foreach (var nav in navs) foreach (var nav in navs)
{ {
@ -829,7 +829,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
SaveOutsideCascade(nav.Value.RefTable, nav.Value, outsideList); SaveOutsideCascade(nav.Value.RefTable, nav.Value, outsideList);
} }
} }
void SaveOutsideCascade(ZoreTableInfo entityTable, ZoreTableRef nav, IEnumerable<NativeTuple<T, T>> outsideData) void SaveOutsideCascade(ZeroTableInfo entityTable, ZeroTableRef nav, IEnumerable<NativeTuple<T, T>> outsideData)
{ {
outsideData = outsideData.Where(a => CanCascade(entityTable, a.Item2, true)).ToList(); outsideData = outsideData.Where(a => CanCascade(entityTable, a.Item2, true)).ToList();
if (outsideData.Any() == false) return; if (outsideData.Any() == false) return;
@ -861,20 +861,20 @@ ManyToMany 级联删除中间表(注意不删除外部根)
} }
} }
void UpdateCascade(ZoreTableInfo entityTable, IEnumerable<T> entities, bool cascade) void UpdateCascade(ZeroTableInfo entityTable, IEnumerable<T> entities, bool cascade)
{ {
SaveOutsideCascade(entities, entityTable.Navigates.OrderBy(a => a.Value.RefType).ThenBy(a => a.Key)); SaveOutsideCascade(entities, entityTable.Navigates.OrderBy(a => a.Value.RefType).ThenBy(a => a.Key));
var tracking = new TrackingChangeInfo(); var tracking = new TrackingChangeInfo();
foreach (var entity in entities) foreach (var entity in entities)
{ {
var stateKey = GetEntityKeyString(entityTable, entity); var stateKey = GetEntityKeyString(entityTable, entity);
if (_states.TryGetValue(entityTable.DbName, out var kv) == false || kv.TryGetValue(stateKey, out var state) == false) throw new Exception($"{nameof(ZoreDbContext)} 查询之后,才可以更新数据 {GetEntityString(entityTable, entity)}"); if (_states.TryGetValue(entityTable.DbName, out var kv) == false || kv.TryGetValue(stateKey, out var state) == false) throw new Exception($"{nameof(ZeroDbContext)} 查询之后,才可以更新数据 {GetEntityString(entityTable, entity)}");
CompareEntityValue(entityTable, state.Value, entity, tracking); CompareEntityValue(entityTable, state.Value, entity, tracking);
} }
SaveTrackingChange(tracking); SaveTrackingChange(tracking);
foreach (var entity in entities) AttachCascade(entityTable, entity, false); foreach (var entity in entities) AttachCascade(entityTable, entity, false);
} }
void DeleteCascade(ZoreTableInfo entityTable, IEnumerable<T> entities, List<object> deletedOutput) void DeleteCascade(ZeroTableInfo entityTable, IEnumerable<T> entities, List<object> deletedOutput)
{ {
var tracking = new TrackingChangeInfo(); var tracking = new TrackingChangeInfo();
foreach (var entity in entities) foreach (var entity in entities)
@ -946,13 +946,13 @@ ManyToMany 级联删除中间表(注意不删除外部根)
} }
#region EntityState #region EntityState
internal void AttachCascade(ZoreTableInfo entityTable, T entity, bool includeOutside) internal void AttachCascade(ZeroTableInfo entityTable, T entity, bool includeOutside)
{ {
var ignores = new Dictionary<string, Dictionary<string, bool>>(); //比如 Tree 结构可以递归添加 var ignores = new Dictionary<string, Dictionary<string, bool>>(); //比如 Tree 结构可以递归添加
LocalAttachCascade(entityTable, entity, true); LocalAttachCascade(entityTable, entity, true);
ignores.Clear(); ignores.Clear();
void LocalAttachCascade(ZoreTableInfo table, T entityFrom, bool flag) void LocalAttachCascade(ZeroTableInfo table, T entityFrom, bool flag)
{ {
if (flag == false) return; if (flag == false) return;
if (entityFrom == null) return; if (entityFrom == null) return;
@ -967,7 +967,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
if (kv.ContainsKey(state.Key)) kv[state.Key] = state; if (kv.ContainsKey(state.Key)) kv[state.Key] = state;
else kv.Add(state.Key, state); else kv.Add(state.Key, state);
} }
bool LocalMapEntityValue(ZoreTableInfo table, T entityFrom, T entityTo) bool LocalMapEntityValue(ZeroTableInfo table, T entityFrom, T entityTo)
{ {
if (entityFrom == null || entityTo == null) return true; if (entityFrom == null || entityTo == null) return true;
@ -1081,7 +1081,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
public DateTime Time { get; set; } public DateTime Time { get; set; }
} }
Dictionary<string, Dictionary<string, EntityState>> _states = new Dictionary<string, Dictionary<string, EntityState>>(); Dictionary<string, Dictionary<string, EntityState>> _states = new Dictionary<string, Dictionary<string, EntityState>>();
bool? ExistsInStates(ZoreTableInfo table, T data) bool? ExistsInStates(ZeroTableInfo table, T data)
{ {
if (data == null) throw new ArgumentNullException(nameof(data)); if (data == null) throw new ArgumentNullException(nameof(data));
var key = GetEntityKeyString(table, data); var key = GetEntityKeyString(table, data);
@ -1131,17 +1131,17 @@ ManyToMany 级联删除中间表(注意不删除外部根)
class TrackingChangeInfo class TrackingChangeInfo
{ {
public List<NativeTuple<ZoreTableInfo, T>> InsertLog { get; } = new List<NativeTuple<ZoreTableInfo, T>>(); public List<NativeTuple<ZeroTableInfo, T>> InsertLog { get; } = new List<NativeTuple<ZeroTableInfo, T>>();
public List<NativeTuple<ZoreTableInfo, T, T, List<string>>> UpdateLog { get; } = new List<NativeTuple<ZoreTableInfo, T, T, List<string>>>(); public List<NativeTuple<ZeroTableInfo, T, T, List<string>>> UpdateLog { get; } = new List<NativeTuple<ZeroTableInfo, T, T, List<string>>>();
public List<NativeTuple<ZoreTableInfo, T[]>> DeleteLog { get; } = new List<NativeTuple<ZoreTableInfo, T[]>>(); public List<NativeTuple<ZeroTableInfo, T[]>> DeleteLog { get; } = new List<NativeTuple<ZeroTableInfo, T[]>>();
} }
void CompareEntityValue(ZoreTableInfo rootTable, T rootEntityBefore, T rootEntityAfter, TrackingChangeInfo tracking) void CompareEntityValue(ZeroTableInfo rootTable, T rootEntityBefore, T rootEntityAfter, TrackingChangeInfo tracking)
{ {
var rootIgnores = new Dictionary<string, Dictionary<string, bool>>(); //比如 Tree 结构可以递归添加 var rootIgnores = new Dictionary<string, Dictionary<string, bool>>(); //比如 Tree 结构可以递归添加
LocalCompareEntityValue(rootTable, rootEntityBefore, rootEntityAfter, true); LocalCompareEntityValue(rootTable, rootEntityBefore, rootEntityAfter, true);
rootIgnores.Clear(); rootIgnores.Clear();
void LocalCompareEntityValue(ZoreTableInfo table, T entityBefore, T entityAfter, bool cascade) void LocalCompareEntityValue(ZeroTableInfo table, T entityBefore, T entityAfter, bool cascade)
{ {
if (entityBefore != null) if (entityBefore != null)
{ {
@ -1211,7 +1211,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
} }
} }
} }
void LocalCompareEntityValueCollection(ZoreTableInfo elementTable, IEnumerable collectionBefore, IEnumerable collectionAfter, bool cascade) void LocalCompareEntityValueCollection(ZeroTableInfo elementTable, IEnumerable collectionBefore, IEnumerable collectionAfter, bool cascade)
{ {
if (collectionBefore == null && collectionAfter == null) return; if (collectionBefore == null && collectionAfter == null) return;
if (collectionBefore == null && collectionAfter != null) if (collectionBefore == null && collectionAfter != null)
@ -1271,7 +1271,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
foreach (var key in dictBefore.Keys) foreach (var key in dictBefore.Keys)
LocalCompareEntityValue(elementTable, dictBefore[key], dictAfter.TryGetValue(key, out var afterItem) ? afterItem : null, cascade); LocalCompareEntityValue(elementTable, dictBefore[key], dictAfter.TryGetValue(key, out var afterItem) ? afterItem : null, cascade);
} }
void NavigateReader(ZoreTableInfo readerTable, T readerEntity, Action<string, ZoreTableRef, ZoreTableInfo, List<object>> callback) void NavigateReader(ZeroTableInfo readerTable, T readerEntity, Action<string, ZeroTableRef, ZeroTableInfo, List<object>> callback)
{ {
var ignores = new Dictionary<string, Dictionary<string, bool>>(); //比如 Tree 结构可以递归添加 var ignores = new Dictionary<string, Dictionary<string, bool>>(); //比如 Tree 结构可以递归添加
var statckPath = new Stack<string>(); var statckPath = new Stack<string>();
@ -1281,7 +1281,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
LocalNavigateReader(readerTable, readerEntity); LocalNavigateReader(readerTable, readerEntity);
ignores.Clear(); ignores.Clear();
void LocalNavigateReader(ZoreTableInfo table, T entity) void LocalNavigateReader(ZeroTableInfo table, T entity)
{ {
if (entity == null) return; if (entity == null) return;
var stateKey = GetEntityKeyString(table, entity); var stateKey = GetEntityKeyString(table, entity);
@ -1418,7 +1418,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
return object.Equals(propvalBefore, propvalAfter); return object.Equals(propvalBefore, propvalAfter);
} }
List<T> GetManyToManyObjects(ZoreTableRef nav, T entity, string navName) List<T> GetManyToManyObjects(ZeroTableRef nav, T entity, string navName)
{ {
if (nav.RefType != TableRefType.ManyToMany) return null; if (nav.RefType != TableRefType.ManyToMany) return null;
if (entity.TryGetValue(navName, out var rightsObj) == false || rightsObj is IEnumerable rights == false || rights == null) return null; if (entity.TryGetValue(navName, out var rightsObj) == false || rightsObj is IEnumerable rights == false || rights == null) return null;
@ -1442,7 +1442,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
} }
return middles; return middles;
} }
void SetNavigateRelationshipValue(ZoreTableRef nav, T leftItem, object rightItem) void SetNavigateRelationshipValue(ZeroTableRef nav, T leftItem, object rightItem)
{ {
switch (nav.RefType) switch (nav.RefType)
{ {

View File

@ -3,7 +3,7 @@ using FreeSql.Internal.Model;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace FreeSql.Extensions.ZoreEntity namespace FreeSql.Extensions.ZeroEntity
{ {
public class TableDescriptor public class TableDescriptor
{ {
@ -78,20 +78,20 @@ namespace FreeSql.Extensions.ZoreEntity
} }
class ZoreTableRef class ZeroTableRef
{ {
internal string NavigateKey { get; set; } internal string NavigateKey { get; set; }
public TableRefType RefType { get; set; } public TableRefType RefType { get; set; }
internal ZoreTableInfo Table { get; set; } internal ZeroTableInfo Table { get; set; }
internal ZoreTableInfo RefTable { get; set; } internal ZeroTableInfo RefTable { get; set; }
internal ZoreTableInfo RefMiddleTable { get; set; } internal ZeroTableInfo RefMiddleTable { get; set; }
public List<string> Columns { get; set; } = new List<string>(); public List<string> Columns { get; set; } = new List<string>();
public List<string> MiddleColumns { get; set; } = new List<string>(); public List<string> MiddleColumns { get; set; } = new List<string>();
public List<string> RefColumns { get; set; } = new List<string>(); public List<string> RefColumns { get; set; } = new List<string>();
} }
class ZoreTableInfo : TableInfo class ZeroTableInfo : TableInfo
{ {
public Dictionary<string, ZoreTableRef> Navigates { get; set; } = new Dictionary<string, ZoreTableRef>(StringComparer.OrdinalIgnoreCase); public Dictionary<string, ZeroTableRef> Navigates { get; set; } = new Dictionary<string, ZeroTableRef>(StringComparer.OrdinalIgnoreCase);
} }
} }

View File

@ -5,7 +5,7 @@ VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql", "FreeSql\FreeSql.csproj", "{3AAE17E8-8608-4905-826A-6DB68F75F339}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql", "FreeSql\FreeSql.csproj", "{3AAE17E8-8608-4905-826A-6DB68F75F339}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Extensions.ZoreEntity", "Extensions\FreeSql.Extensions.ZoreEntity\FreeSql.Extensions.ZoreEntity.csproj", "{E0480E6F-CFCD-4108-969C-448E44023C97}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Extensions.ZeroEntity", "Extensions\FreeSql.Extensions.ZeroEntity\FreeSql.Extensions.ZeroEntity.csproj", "{E0480E6F-CFCD-4108-969C-448E44023C97}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Sqlite", "Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj", "{5E4928F2-E52B-4563-9FF7-C0A4119E6596}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Sqlite", "Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj", "{5E4928F2-E52B-4563-9FF7-C0A4119E6596}"
EndProject EndProject

View File

@ -89,7 +89,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.QuestDb",
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Xugu", "Providers\FreeSql.Provider.Xugu\FreeSql.Provider.Xugu.csproj", "{353F3732-0704-40F2-972B-036E9CC01881}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Xugu", "Providers\FreeSql.Provider.Xugu\FreeSql.Provider.Xugu.csproj", "{353F3732-0704-40F2-972B-036E9CC01881}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Extensions.ZoreEntity", "Extensions\FreeSql.Extensions.ZoreEntity\FreeSql.Extensions.ZoreEntity.csproj", "{4367B7AC-604F-4503-A1D4-643ADBFCF703}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Extensions.ZeroEntity", "Extensions\FreeSql.Extensions.ZeroEntity\FreeSql.Extensions.ZeroEntity.csproj", "{4367B7AC-604F-4503-A1D4-643ADBFCF703}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution

View File

@ -125,7 +125,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Xugu", "Pr
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.Xugu", "FreeSql.Tests\FreeSql.Tests.Provider.Xugu\FreeSql.Tests.Provider.Xugu.csproj", "{16C21D77-20AC-4722-AD97-F53BDDE8210C}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.Xugu", "FreeSql.Tests\FreeSql.Tests.Provider.Xugu\FreeSql.Tests.Provider.Xugu.csproj", "{16C21D77-20AC-4722-AD97-F53BDDE8210C}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Extensions.ZoreEntity", "Extensions\FreeSql.Extensions.ZoreEntity\FreeSql.Extensions.ZoreEntity.csproj", "{D9419896-BFB0-47C1-BEFD-A6C48394643B}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Extensions.ZeroEntity", "Extensions\FreeSql.Extensions.ZeroEntity\FreeSql.Extensions.ZeroEntity.csproj", "{D9419896-BFB0-47C1-BEFD-A6C48394643B}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution