using FreeSql.DataAnnotations; using FreeSql; using System; using System.Collections.Generic; using Xunit; using System.Linq; using Newtonsoft.Json.Linq; using NpgsqlTypes; using Npgsql.LegacyPostgis; using System.Linq.Expressions; using System.Threading.Tasks; using System.ComponentModel.DataAnnotations; namespace FreeSql.Tests { public class UnitTest2 { public partial class SysModulePermission { /// /// 菜单权限ID /// [Column(IsPrimary = true)] public String SysModulePermissionId { get; set; } /// /// 菜单主键ID /// public String SysModuleId { get; set; } /// /// 按钮主键ID /// public String SysModuleButtonId { get; set; } /// /// 菜单权限 /// public Int32 Status { get; set; } } public partial class SysModule { /// /// 主键 /// [Column(IsPrimary = true)] public String SysModuleId { get; set; } /// /// 父级ID /// public String ParentId { get; set; } /// /// 名称 /// public String Name { get; set; } /// /// 图标 /// public String Icon { get; set; } /// /// 链接地址 /// public String UrlAddress { get; set; } /// /// 是否公开 /// public Int32 IsShow { get; set; } /// /// 排序 /// public Int32? Sort { get; set; } /// /// 备注 /// public String Description { get; set; } /// /// 创建日期 /// public DateTime CreateTime { get; set; } } public partial class SysModuleButton { /// /// 按钮主键 /// [Column(IsPrimary = true)] public String SysModuleButtonId { get; set; } /// /// 名称 /// public String Name { get; set; } /// /// 事件名称 /// public String EventName { get; set; } /// /// 编码 /// public String EnCode { get; set; } /// /// 图标 /// public String Icon { get; set; } /// /// 排序 /// public Int32? Sort { get; set; } /// /// 创建日期 /// public DateTime CreateTime { get; set; } } partial class SysModulePermission { public SysModuleButton Button { get; set; } } partial class SysModule { public List Permissions { get; set; } } partial class SysModuleButton { } [Fact] public void Test02() { g.sqlite.Delete().Where("1=1").ExecuteAffrows(); g.sqlite.Delete().Where("1=1").ExecuteAffrows(); g.sqlite.Delete().Where("1=1").ExecuteAffrows(); var menu1 = new SysModule { SysModuleId = "menu1", Name = "菜单1" }; var menu2 = new SysModule { SysModuleId = "menu2", Name = "菜单2" }; g.sqlite.Insert(new[] { menu1, menu2 }).ExecuteAffrows(); var button1 = new SysModuleButton { SysModuleButtonId = "button1", Name = "添加" }; var button2 = new SysModuleButton { SysModuleButtonId = "button2", Name = "修改" }; var button3 = new SysModuleButton { SysModuleButtonId = "button3", Name = "删除" }; var button4 = new SysModuleButton { SysModuleButtonId = "button4", Name = "查询" }; g.sqlite.Insert(new[] { button1, button2, button3, button4 }).ExecuteAffrows(); g.sqlite.Insert(new[] { new SysModulePermission { SysModulePermissionId = "menu1_button1", SysModuleId = menu1.SysModuleId, SysModuleButtonId = button1.SysModuleButtonId }, new SysModulePermission { SysModulePermissionId = "menu1_button2", SysModuleId = menu1.SysModuleId, SysModuleButtonId = button2.SysModuleButtonId }, new SysModulePermission { SysModulePermissionId = "menu1_button3", SysModuleId = menu1.SysModuleId, SysModuleButtonId = button3.SysModuleButtonId }, new SysModulePermission { SysModulePermissionId = "menu1_button4", SysModuleId = menu1.SysModuleId, SysModuleButtonId = button4.SysModuleButtonId }, new SysModulePermission { SysModulePermissionId = "menu2_button1", SysModuleId = menu2.SysModuleId, SysModuleButtonId = button1.SysModuleButtonId }, new SysModulePermission { SysModulePermissionId = "menu2_button2", SysModuleId = menu2.SysModuleId, SysModuleButtonId = button2.SysModuleButtonId }, new SysModulePermission { SysModulePermissionId = "menu2_button3", SysModuleId = menu2.SysModuleId, SysModuleButtonId = button3.SysModuleButtonId }, new SysModulePermission { SysModulePermissionId = "menu2_button4", SysModuleId = menu2.SysModuleId, SysModuleButtonId = button4.SysModuleButtonId }, }).ExecuteAffrows(); //var list = g.sqlite.Select() // .IncludeMany(m => m.Buttons) // .Page(1, 10) // .ToList(); var list = g.sqlite.Select() .IncludeMany(m => m.Permissions.Where(p => p.SysModuleId == m.SysModuleId), then => then.LeftJoin(p => p.Button.SysModuleButtonId == p.SysModuleButtonId)) .ToList(); } } }