mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- rename ZoreEntity to ZeroEntity
This commit is contained in:
parent
bf92f09b9e
commit
8a70974bb8
@ -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"",
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
举例1:LeftJoin("table1", "id", "user.id") -> LEFT JOIN [table1] b ON b.[id] = a.[id]<para></para>
|
举例1:LeftJoin("table1", "id", "user.id") -> LEFT JOIN [table1] b ON b.[id] = a.[id]<para></para>
|
||||||
举例2:LeftJoin("table1", "id", "user.id", "xid", "user.xid") -> LEFT JOIN [table1] b ON b.[id] = [a].id] AND b.[xid] = a.[xid]
|
举例2:LeftJoin("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>
|
||||||
举例1:InnerJoin("table1", "id", "user.id") -> INNER JOIN [table1] b ON b.[id] = a.[id]<para></para>
|
举例1:InnerJoin("table1", "id", "user.id") -> INNER JOIN [table1] b ON b.[id] = a.[id]<para></para>
|
||||||
举例2:InnerJoin("table1", "id", "user.id", "xid", "user.xid") -> INNER JOIN [table1] b ON b.[id] = [a].id] AND b.[xid] = a.[xid]
|
举例2:InnerJoin("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>
|
||||||
举例1:RightJoin("table1", "id", "user.id") -> RIGTH JOIN [table1] b ON b.[id] = a.[id]<para></para>
|
举例1:RightJoin("table1", "id", "user.id") -> RIGTH JOIN [table1] b ON b.[id] = a.[id]<para></para>
|
||||||
举例2:RightJoin("table1", "id", "user.id", "xid", "user.xid") -> RIGTH JOIN [table1] b ON b.[id] = [a].id] AND b.[xid] = a.[xid]
|
举例2:RightJoin("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>
|
@ -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();
|
@ -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)
|
||||||
{
|
{
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user