DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.17k stars 1.32k forks source link

导航删除支援复合主键嗎? #1258

Closed flier268 closed 1 week ago

flier268 commented 1 week ago

我現在有兩個table,他們是一對多 第一個表(一)主鍵為A、B 第二個表(多)為A、B、C 我看了原始碼,看起來好像不支援?

 public Navigate(NavigateType navigatType, string ifSingleMasterTableColumn_IfListChildTableColumn)
class ATable
{

    [SugarColumn(IsPrimaryKey = true)]
   public string A{get;set;}
    [SugarColumn(IsPrimaryKey = true)]
   public string B{get;set;}

    [Navigate(NavigateType.OneToMany, nameof(BTable.A), nameof(BTable.B))]
    public List<B> BList { get; set; }
}

class BTable
{
    [SugarColumn(IsPrimaryKey = true)]
   public string A{get;set;}
    [SugarColumn(IsPrimaryKey = true)]
   public string B{get;set;}
    [SugarColumn(IsPrimaryKey = true)]
   public string C{get;set;}

}
DotNetNext commented 1 week ago

https://www.donet5.com/Home/Doc?typeId=2431

看多对多删除的例子

flier268 commented 1 week ago

但我現在沒有中間表,而且他是一對多的關係,還是我應該把他搞得跟多對多一樣? 剛接觸這個庫,中間表可以是虛擬的嗎?只有實體沒有資料庫這樣

DotNetNext commented 1 week ago

中间表需要有张表,按文档这种多对多用

flier268 commented 1 week ago

只能這樣刪除嗎?


                await sugarClient.Deleteable<BTable>()
                    .Where(p =>
                        SqlFunc.Subqueryable<ATable>().Where(s => s.A == p.A && s.B == p.B)
                            .Where(s => s.A == "Hello")
                            .Any())
                    .ExecuteCommandAsync(cancellationToken);

文件沒寫清楚,這樣是會將ATable、BTable符合條件的都刪除嗎?包括ATable的s.A == "Hello",還是只會刪除BTable的

DotNetNext commented 1 week ago

你子查询删除也可以,我不是很清楚你的逻辑

flier268 commented 1 week ago

我要刪除A表格的部分內容,然後一同刪除B表格的部分內容,接著刪除C表的部分內容,A跟B有共同的鍵,B跟C有共同的鍵 A表找到B表,B表找到C表,刪除的條件都在A

DotNetNext commented 1 week ago

这个不清楚了,你反正如果用导航方式删是可以的 ,如果不是导航规则那就需要手动处理 你这种一般是多对多 A表和B表 还有一个中间表 AB表

flier268 commented 1 week ago

一般來說是這樣沒錯,但這個鳥資料庫也不是我設計的,各種麻煩的奇妙設計

這個結果會如何呢?

文件沒寫清楚,這樣是會將ATable、BTable符合條件的都刪除嗎?包括ATable的s.A == "Hello",還是只會刪除BTable的

DotNetNext commented 1 week ago

不用导航就是一张表,一张表的删

DotNetNext commented 1 week ago

无非把导航思想转成单表思想

flier268 commented 1 week ago

所以這樣只會刪BTable,還需要執行一次同篩選條件刪除ATable的

DotNetNext commented 1 week ago
//m是主表字段 c是子表字段 是一个json数组 格式不要错了 
[Navigate(NavigateType.Dynamic, "[{m:\"Id\",c:\"AddressId\"},{m:\"Id2\",c:\"AddressId2\"}]")]
public List<UnitPerson011> Persons { get; set; }

你这种只支持查询 2双字段的。删除 不支持

DotNetNext commented 1 week ago

先关闭还有疑问发新的ISSUE