[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框架(七)—仓储模式
3.1.9.4版本增加新功能仓储模式
1.安装
可在Nuget上搜索最新版本
或者使用Nuget命令
dotnet add package Kogel.Dapper.Extension.Mssql 3.1.9.4
2.定义
使用特性ForeignKey定义主外键关系
[Display(Rename = "News")] public class News:IBaseEntity<News,int> { /// <summary> /// 新闻主键 /// </summary> [Identity] public override int Id { get; set; } /// <summary> /// 内容 /// </summary> public string Content { get; set; } /// <summary> /// 评论列表 /// </summary> [ForeignKey("Id", "ArticleId")] public List<Comment2> Comments { get; set; } }
[Display(Rename = "Comment")] public class Comment : IBaseEntity<Comment,int> { [Identity] public override int Id { get; set; } /// <summary> /// 新闻id /// </summary> public int ArticleId { get; set; } /// <summary> /// 评论内容 /// </summary> public string Content { get; set; } }
注意:用到导航属性的实体类需要继承IBaseEntity,最好所有实体类都继承IBaseEntity
(在没有用到导航属性时,导航属性不会起任何作用,查询时也不会返回导航属性数据)
使用导航属性进行条件判断查询
var comment = conn.QuerySet<News1>() .Where(x => x.Comments.Any(y => y.Id != 10)) .ToList();
查询导航属性的数据,并使用Select
var comment11 = conn.QuerySet<News>() .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 : IBaseEntity<Comment,int> { [Identity] public override int Id { get; set; } /// <summary> /// 内容 /// </summary> public string Content { get; set; } /// <summary> /// 新闻id /// </summary> public int ArticleId { get; set; } //一条评论对应一条新闻 [ForeignKey("ArticleId","Id")] public News News { get; set; } }
1对1使用导航属性查询
var comment = conn.QuerySet<Comment>() .Where(x => x.News.Id == 1) .Get();
框架开源,完整框架源码可以去Github上下载:
https://github.com/a935368322/Kogel.Dapper.Extension
如有问题也可以加QQ群讨论:
技术群 710217654