数据库的设计
实体之间的关系图

实体
EleOrderRowItem.cs
| public class EleOrderRowItem : EleEntity |
| { |
| |
| public string? Xxx { get; set; } |
| |
| |
| public long RowId { get; set; } |
| public required EleOrderRow Row { get; set; } |
| } |
EleOrderRow.cs
| public class EleOrderRow : EleEntity |
| { |
| |
| public string? Xxx { get; set; } |
| |
| |
| public long RequestId { get; set; } |
| public required EleOrderRequest Request { get; set; } |
| |
| |
| public required ICollection<EleOrderRowItem> RowItems { get; set; } |
| |
| } |
| |
EleOrderRequest.cs
| public class EleOrderRequest : EleEntity |
| { |
| |
| public string? Xxx { get; set; } |
| |
| |
| public long OrderId { get; set; } |
| public required EleOrder Order { get; set; } |
| |
| |
| public required ICollection<EleOrderRow> Rows { get; set; } |
| |
| } |
| |
| |
| |
| public class EleOrderHeader : EleEntity |
| { |
| |
| public string? Xxx { get; set; } |
| |
| |
| public long OrderId { get; set; } |
| public required EleOrder Order { get; set; } |
| |
| } |
| |
EleOrder.cs
| public class EleOrder : EleEntity |
| { |
| |
| |
| |
| [Required] |
| public EleOrderHeader MessageHeader { get; set; } |
| |
| |
| |
| |
| [Required] |
| public ICollection<EleOrderRequest> Requests { get; set; } |
| |
| } |
| |
外键配置
| modelBuilder.Entity<EleOrder>(entity => |
| { |
| |
| entity.HasOne(d => d.MessageHeader).WithOne(u => u.Order).HasForeignKey<EleOrderHeader>(u => u.OrderId); |
| |
| |
| entity.HasMany(d => d.Requests).WithOne(u => u.Order).HasForeignKey(r => r.OrderId).OnDelete(DeleteBehavior.Cascade); |
| |
| }); |
| |
| modelBuilder.Entity<EleOrderRequest>(entity => |
| { |
| |
| entity.HasMany(e => e.Rows).WithOne(r => r.Request).HasForeignKey(x => x.RequestId).OnDelete(DeleteBehavior.Cascade); |
| }); |
| |
| modelBuilder.Entity<EleOrderRow>(entity => |
| { |
| |
| entity.HasMany(d => d.RowItems).WithOne(u => u.Row).HasForeignKey(x => x.RowId).OnDelete(DeleteBehavior.Cascade); |
| }); |
LINQ查询关联表
| var orders = context.EleOrder |
| .Include(x => x.MessageHeader) |
| .Include(x => x.Requests) |
| .ThenInclude(x => x.Rows) |
| .ThenInclude(x => x.RowItems) |
| .ToList(); |
手动查询
| var orders = context.EleOrder.ToList(); |
| foreach (var order in orders) |
| { |
| |
| |
| var header = context.EleOrderHeader.Where(x => x.OrderId == order.Id).First(); |
| |
| order.MessageHeader = header; |
| |
| var requests = context.EleOrderRequest.Where(x => x.OrderId == order.Id).ToList(); |
| |
| foreach (var request in requests) |
| { |
| var rows = context.EleOrderRow.Where(x => x.RequestId == request.Id).ToList(); |
| foreach (var row in rows) |
| { |
| var rowItems = context.EleOrderRowItem.Where(x => x.RowId == row.Id).ToList(); |
| row.RowItems = rowItems; |
| } |
| request.Rows = rows; |
| } |
| order.Requests = requests; |
| TestDbMapper(order); |
| break; |
| } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战