EF Core 创建一对一关系

 1 public class Sys_Menu : IEntity
 2 {
 3 
 4     /// <summary>
 5     /// Id
 6     /// </summary>
 7     [Key]
 8     public int Id { get; set; }
 9 
10     /// <summary>
11     /// Path
12     /// </summary>
13     public String Path { get; set; }
14 
15     /// <summary>
16     /// 名称
17     /// </summary>
18     public String Name { get; set; }
19     /// <summary>    
20     /// Component
21     /// </summary>
22     public String Component { get; set; }
23     /// <summary>
24     /// Redirect
25     /// </summary>
26     public String Redirect { get; set; }
27 
28     /// <summary>    
29     /// 启用/禁用
30     /// </summary>
31     public Enable IsEnable { get; set; }
32 
33     /// <summary>
34     /// 排序
35     /// </summary>
36     public int Sort { get; set; }
37 
38     /// <summary>
39     /// 父级
40     /// </summary>
41     public int? PID { get; set; }
42 
43     [NotMapped]
44     public List<Sys_Menu> Children { get; set; }
45        
46     public Sys_Meta Meta { get; set; }
47 }
 1 public class Sys_Meta : IEntity
 2 {
 3     /// <summary>
 4     /// Id
 5     /// </summary>
 6     [Key]
 7     public int MetaId { get; set; }
 8 
 9     /// <summary>
10     /// 菜单名称
11     /// </summary>
12     public String Title { get; set; }
13 
14     /// <summary>    
15     /// 开启外链条件,`1、isLink: true 2、链接地址不为空(meta.isLink) 3、isIframe: false`
16     /// </summary>
17     public String IsLink { get; set; }
18 
19     /// <summary>
20     ///  菜单是否隐藏(菜单不显示在界面,但可以进行跳转)
21     /// </summary>
22     public bool IsHide { get; set; }
23 
24     /// <summary>
25     /// 菜单是否缓存
26     /// </summary>
27     public bool IsKeepAlive { get; set; }
28     /// <summary>
29     /// 菜单是否固定(固定在 tagsView 中,不可进行关闭),右键菜单无 `关闭` 项
30     /// </summary>
31     public bool IsAffix { get; set; }
32 
33     /// <summary>
34     /// 开启条件,`1、isIframe: true 2、链接地址不为空(meta.isLink)`
35     /// </summary>
36     public bool IsIframe { get; set; }
37 
38     /// <summary>
39     /// 权限标识
40     /// </summary>
41     public String[] Roles { get; set; }
42     /// <summary>
43     /// 菜单图标
44     /// </summary>
45     public String Icon { get; set; }
46 
47     /// <summary>
48     /// 菜单Id
49     /// </summary>   
50     public int Id { get; set; }
51 
52 
53 }

现有以上两个model,Sys_Menu 和 Sys_Meta,两者为一对一关系 即一个 Sys_Menu 对应一个 Sys_Meta

注意已设置 Sys_Menu  中对应的 Sys_Meta

即:

public Sys_Meta Meta { get; set; }

现在到 Sys_Menu  的 Configure 中去配置 对应关系

public class Sys_MenuConfigure : IEntityTypeBuilder<Sys_Menu>
{
    public void Configure(EntityTypeBuilder<Sys_Menu> entityBuilder, DbContext dbContext, Type dbContextLocator)
    {
        entityBuilder
              .HasOne(b => b.Meta)
              .WithOne()
              .HasForeignKey<Sys_Meta>(b => b.Id);
        
    }
}

执行 查询

// 查询所有Menu 序列化储存
        var DbMenu = await _personRepository.AsQueryable().OrderByDescending(x => x.Sort)
            .Include(x => x.Meta).ToListAsync();

查询 结果如下

 


posted @ 2022-05-25 16:37  顾小凡  阅读(150)  评论(0)    收藏  举报