关于导航属性 返回
实体:
public class ItemA
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public string Name { get; set; }
public object Other { get; set; }
[Navigate(NavigateType.OneToMany, nameof(ItemB.AId))]
public List<ItemB> ItemBs { get; set; }
[Navigate(NavigateType.OneToMany, nameof(ItemC.AId))]
public List<ItemC> ItemCs { get; set; }
[Navigate(NavigateType.OneToMany, nameof(ItemD.AId))]
public List<ItemD> ItemDs { get; set; }
}
public class ItemB
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public string Name { get; set; }
public int No { get; set; }
public int AId { get; set; }
}
public class ItemC
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public string Name { get; set; }
public int No { get; set; }
public int AId { get; set; }
public int BId { get; set; }
}
public class ItemD
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public string Name { get; set; }
public string SomeThing { get; set; }
public int AId { get; set; }
public int BId
{
get; set;
}
#endregion
}
var r=db.InsertNav(itemA)
.Include(i => i.ItemBs)
.Include(i => i.ItemCs)
.ExecuteCommand();执行后 ItemBs 和ItemCs内部的AId 正确赋值,但是ItemC的BId 为null。我哪块有问题,能否帮忙指正下。
热忱回答(14)
-
?稻草人 VIP0
2022/12/16如果后续再接Update 会导致ItemB 重复插入一遍
0 回复 -
fate sta VIP0
2022/12/16//强制删除下级一对多脏数据(5.0.2.3-preview04)db.UpdateNav(list).Include(z1 => z1.Books,newUpdateNavOptions(){OneToManyDeleteAll=true})//强制删除下级一对多的脏数据.ThenInclude(z1 => z1.RoomList).ExecuteCommand();0 回复 -
?稻草人 VIP0
2022/12/16@fate sta:期望值

而不是:

现在的弄的要么A 跟BC 都关联了,B和C 缺不关联;或者如上图一样 ,把C增加一个IitemB的属性,那么Update后ABC 没联系到一起,逻辑22分开了,更新的时候 C里的ItemB 又插入一遍
0 回复 -
?稻草人 VIP0
2022/12/16之前到时候是这样:
0 回复 -
fate sta VIP0
2022/12/17提供DEMO吧 不清楚你说的什么
0 回复 -
fate sta VIP0
2022/12/170 回复 -
?稻草人 VIP0
2022/12/17using Modles; using SqlSugar; using System; using System.Collections.Generic; //控制台: class Program static void Main(string[] args) { var doc = new Document(); doc.Name = "项目"; doc.Num = "0001"; doc.Createdtime = DateTime.Now; doc.Details = new List<Detail>() { new Detail { Count=100, Createddate=DateTime.Now, Summary="明细1摘要", Sequencenumber=1, Num="0001" }, new Detail { Count=200, Createddate=DateTime.Now, Summary="明细2摘要", Sequencenumber=2, Num="0002" } }; doc.Detail_Exs = new List<Detail_Ex> { new Detail_Ex { Num=null, Rowno="0001", Summary="明细1扩展" }, new Detail_Ex { Num=null, Rowno="0002", Summary="明细2扩展" } }; var r = DbContext.Db.InsertNav(doc) .Include(c => c.Details) .Include(c => c.Detail_Exs).ThenInclude(c => c.Detail) .Include(c => c.Auxiliaries).ThenInclude(c => c.Detail) .ExecuteCommand(); Console.WriteLine($"{(r ? "成功" : "失败")}"); Console.ReadKey(); } } public class DbContext { public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig() { DbType = SqlSugar.DbType.SqlServer, ConnectionString = "Server=127.0.0.1;Database=master;user id=sa;password=123456;MultipleActiveResultSets=true", IsAutoCloseConnection = true }, db => { //单例参数配置,所有上下文生效 db.Aop.OnLogExecuting = (s, p) => { Console.WriteLine(s); }; }); } //实体: public class Document { /// <summary> /// 编号 ///</summary> [SugarColumn(ColumnName="num" )] public string Num { get; set; } /// <summary> /// 名称 ///</summary> [SugarColumn(ColumnName="name" )] public string Name { get; set; } /// <summary> /// 时间戳 ///</summary> [SugarColumn(ColumnName="ts" ,IsIgnore =true )] public byte[] Ts { get; set; } /// <summary> /// 排序号 ///</summary> [SugarColumn(ColumnName="orderNum" )] public string OrderNum { get; set; } /// <summary> /// 主键ID ///</summary> [SugarColumn(ColumnName="id" ,IsPrimaryKey = true ,IsIdentity = true )] public int Id { get; set; } /// <summary> /// 创建时间 ///</summary> [SugarColumn(ColumnName= "createdate")] public DateTime? Createdtime { get; set; } /// <summary> /// /// </summary> [Navigate(NavigateType.OneToMany,nameof(Detail.DocId))] public List<Detail> Details { get; set; } /// <summary> /// /// </summary> [Navigate(NavigateType.OneToMany, nameof(Detail_Ex.Docid))] public List<Detail_Ex> Detail_Exs { get; set; } /// <summary> /// /// </summary> [Navigate(NavigateType.OneToMany, nameof(Auxiliary.DocId))] public List<Auxiliary> Auxiliaries { get; set; } } public class Detail { /// <summary> /// 编号 ///</summary> [SugarColumn(ColumnName="num" )] public string Num { get; set; } /// <summary> /// 摘要 ///</summary> [SugarColumn(ColumnName="summary" )] public string Summary { get; set; } /// <summary> /// 数量 ///</summary> [SugarColumn(ColumnName="count" )] public int? Count { get; set; } /// <summary> /// 顺序号 ///</summary> [SugarColumn(ColumnName="sequencenumber" )] public int? Sequencenumber { get; set; } /// <summary> /// 分布时间戳 ///</summary> [SugarColumn(ColumnName="ts" ,IsIgnore =true )] public byte[] Ts { get; set; } /// <summary> /// 主键ID ///</summary> [SugarColumn(ColumnName="id" ,IsPrimaryKey = true ,IsIdentity = true )] public int Id { get; set; } /// <summary> /// Docid ///</summary> [SugarColumn(ColumnName="docId" )] public int? DocId { get; set; } /// <summary> /// 创建时间 ///</summary> [SugarColumn(ColumnName = "createddate")] public DateTime? Createddate { get; set; } } public class Detail_Ex { /// <summary> /// 编号 ///</summary> [SugarColumn(ColumnName="num" )] public string Num { get; set; } /// <summary> /// 行号 ///</summary> [SugarColumn(ColumnName="rowno" )] public string Rowno { get; set; } /// <summary> /// 摘要 ///</summary> [SugarColumn(ColumnName="summary" )] public string Summary { get; set; } /// <summary> /// 时间戳 ///</summary> [SugarColumn(ColumnName="ts" ,IsIgnore =true )] public byte[] Ts { get; set; } /// <summary> /// 主键ID ///</summary> [SugarColumn(ColumnName="id" ,IsPrimaryKey = true ,IsIdentity = true )] public int Id { get; set; } /// <summary> /// DocID ///</summary> [SugarColumn(ColumnName="docid" )] public int Docid { get; set; } /// <summary> /// detailID ///</summary> [SugarColumn(ColumnName="detailId" )] public int? DetailId { get; set; } /// <summary> /// auxiliaryId ///</summary> [SugarColumn(ColumnName="auxiliaryid" )] public int? AuxiliaryId { get; set; } /// <summary> /// 创建时间 ///</summary> [SugarColumn(ColumnName="createddate" )] public DateTime? Createddate { get; set; } [Navigate(NavigateType.OneToOne, nameof(DetailId))] public Detail Detail { get; set; } [Navigate(NavigateType.OneToOne, nameof(AuxiliaryId))] public Auxiliary Auxiliary { get; set; } } public class Auxiliary { /// <summary> /// ///</summary> [SugarColumn(ColumnName="num" )] public string Num { get; set; } /// <summary> /// 名称 ///</summary> [SugarColumn(ColumnName = "name")] public string Name { get; set; } /// <summary> /// ///</summary> [SugarColumn(ColumnName="orderNo" )] public string OrderNum { get; set; } /// <summary> /// ///</summary> [SugarColumn(ColumnName="ts" )] public byte[] Ts { get; set; } /// <summary> /// ///</summary> [SugarColumn(ColumnName="id" ,IsPrimaryKey = true ,IsIdentity = true )] public int Id { get; set; } /// <summary> /// ///</summary> [SugarColumn(ColumnName="docId" )] public int? DocId { get; set; } /// <summary> /// ///</summary> [SugarColumn(ColumnName="detailId" )] public int? DetailId { get; set; } /// <summary> /// ///</summary> [SugarColumn(ColumnName="createdate" )] public DateTime? CreateDate { get; set; } [Navigate(NavigateType.OneToOne, nameof(DetailId))] public Detail Detail { get; set; } }1、Detail Detail_Ex Auxiliary 三者的DocId 关系Docment的Id
2、Detail_Ex 和Auxiliary 的DetailId 两者关系Detail的Id
3、Detail_Ex的AuxiliaryId关系Auxiliary的id
现在结果是第2步没有达到效果,第3步和第二步一样的原因
0 回复 -
?稻草人 VIP0
2022/12/17不知道这样我是否说明白了
0 回复 -
fate sta VIP0
2022/12/17
1你的用例 ex里面并且没有details 为什么还要加个theninclude
0 回复 -
fate sta VIP0
2022/12/17varr = DbContext.Db.InsertNav(doc).Include(c => c.Details).Include(c => c.Detail_Exs).ExecuteCommand();你的DEMO我怎么看都只能写成这样
0 回复 -
?稻草人 VIP0
2022/12/17@fate sta:嗯 我本来也是
var r = DbContext.Db.InsertNav(doc) .Include(c => c.Details) .Include(c => c.Detail_Exs) .ExecuteCommand();
这样的,但是因为Detail_Ex的DetailId 没数据,所以才加了个,请问怎么才能让Detail_Ex的DetailId 正确插入对应的Detail的Id
0 回复 -
fate sta VIP0
2022/12/17
第三层属性才能用theninlcued
0 回复 -
?稻草人 VIP0
2022/12/17几个二层之间又有一对一关系 ,这个要单独手动更新吗
0 回复 -
fate sta VIP0
2022/12/18不清楚你讲的,你先把ORM自带的功能看懂。有问题提供完整DEMO
0 回复