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();
}
}
}