[LINQ2Dapper]最完整Dapper To Linq框架(八)---导航属性

目录

  • [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询
  • [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询
  • [LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射
  • [LINQ2Dapper]最完整Dapper To Linq框架(四)---Linq和SQL并行使用
  • [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL
  • [LINQ2Dapper]最完整Dapper To Linq框架(六)---多表联合与匿名类型返回
  • [LINQ2Dapper]最完整Dapper To Linq框架(七)---仓储模式
  • [LINQ2Dapper]最完整Dapper To Linq框架(八)---导航属性

 

3.1.9.4版本增加新功能导航属性

1.安装

可在Nuget上搜索最新版本(目前是预览版本,只能通过Nuget命令安装

或者使用Nuget命令

dotnet add package Kogel.Dapper.Extension.Mssql 3.1.9.5

 (此版本可能存在一些小坑,不建议正式项目使用)

 

2.定义

使用特性ForeignKey定义主外键关系

    [Display(Rename = "News")]
    public class News:IBaseEntity
    {
        /// 
        /// 新闻主键
        /// 
        [Identity]
        public override int Id { get; set; }

        /// 
        /// 内容
        /// 
        public string Content { get; set; }

        /// 
        /// 评论列表
        /// 
        [ForeignKey("Id", "ArticleId")]
        public List Comments { get; set; }
    }
[Display(Rename = "Comment")]
public class Comment : IBaseEntityint>
    {
        [Identity]
        public override int Id { get; set; }
        /// 
        /// 新闻id
        /// 
        public int ArticleId { get; set; }
        /// 
        /// 评论内容
        /// 
            public string Content { get; set; }
    }

注意:用到导航属性的实体类需要继承IBaseEntity,最好所有实体类都继承IBaseEntity

 

(在没有用到导航属性时,导航属性不会起任何作用,查询时也不会返回导航属性数据)

使用导航属性进行条件判断查询

  var comment = conn.QuerySet()
    .Where(x => x.Comments.Any(y => y.Id != 10))
    .ToList();

查询导航属性的数据,并使用Select

    var comment11 = conn.QuerySet()
        .Where(x => x.Comments.Any(y => y.Id != 10))
        .Get(x => new NewsDto1
        {
            Id = x.Id,
            Title = x.Content,
            CommentDto1 = x.Comments.Select(y => new CommentDto1()
            {
                Id = y.Id,
                Content = y.Content
            }).ToList()
        });

自定义返回的Dto类需要继承IBaseEntity接口

//需要继承IBaseEntity接口
public class CommentDto1:IBaseEntity
{
    public  int Id { get; set; }
    public  string Content { get; set; }
    //实现返回主键id,Orm解析需要一个标识字段分割数据
    public object GetId()
    {
           return Id;
    }
}

 

3.    1对1导航关系

    public class Comment : IBaseEntityint>
    {
        [Identity]
        public override int Id { get; set; }

        /// 
        /// 内容
        /// 
        public string Content { get; set; }

        /// 
        /// 新闻id
        /// 
        public int ArticleId { get; set; }

        //一条评论对应一条新闻
        [ForeignKey("ArticleId","Id")]
        public News News { get; set; }

    }

1对1使用导航属性查询

var comment = conn.QuerySet()
    .Where(x => x.News.Id == 1)
    .Get();

 

 

框架开源,完整框架源码可以去Github上下载:

https://github.com/a935368322/Kogel.Dapper.Extension

如有问题也可以加QQ群讨论:

技术群 710217654

你可能感兴趣的:([LINQ2Dapper]最完整Dapper To Linq框架(八)---导航属性)