[LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射

此特性需要安装Kogel.Dapper.Mssql或者Oracle 3.06及以上版本,实体类层需要安装Kogel.Dapper.Extension 3.06及以上版本

目录

 

1.实体类和数据库关系映射特性

1.[Identity]可以标识主键

1
2
[Identity]
public int id { get; set; }

Identity内还可以使用IsIncrease指定字符串是否是自增,来判断插入语句是否需要给该字段赋值 

1
2
[Identity(IsIncrease =true)]  //默认为true,是自增
 public int Id { get; set; }

2.实体类名称和数据库表名不一致,或者属性名称和字段不一致

可以使用 [Display(Rename = "名称")] 特性标识

1
2
3
4
5
6
[Display(Rename = "users")]
    public class testusers
    {
        [Display(Rename ="Content")]
        public string testName222 { get; set; }
    }

Rename填写数据库对应的表名或者字段名称,用来映射表关系

执行效果

或者直接使用

//或者直接使用ResetTableName,例如
conn.QuerySet<testusers>().ResetTableName(typeof(testusers), "users").Get();

(只会在当条语句生效)

 

 3.Display使用AsName区别同表之间的关系

假设同一条表达式语句中查询了两次A表,这时使用where条件 Where<A>可能无法指定到底是判断哪张A表,

这时就需要使用AsName

1
2
3
4
5
6
7
8
9
10
11
12
[Display(AsName ="commm1")]
    public class Comment:IBaseEntity<int>
    {
        [Identity(IsIncrease =true)]
        public int Id { get; set; }
    }
//继承同表,设置表名称
[Display(AsName = "commm2",Rename = "Comment")]
  public class Comment1 : Comment
    {
 
    }

现在表达式如果需要判断第二个A表的条件就可以直接使用

表达式.Where<Comment1>(条件)来判断了,匿名类型返回字段和连表查询时都可以用到来避免冲突。

 

4.非表映射关系

可以使用   [Display(IsField = false)] 特性标识

框架隐射时就会排除该字段

 

2.使用原生Dapper是否可以用Kogel.Dapper的特性标识

目前支持原生Dapper的特性只有[Display(Rename = "名称")]

不过用法有点差别,需要先执行FieldMatch<T>()方法

 然后实体类

 

 这个FieldMatch函数是注册全局的,所以只需要执行一次

然后查看效果,字段“test111”的值变成了Rename指向“Content”的值

 

3.实体类预加载

        在系统启动时可以使用 EntityCache.Register 注册实体类到内存中,后续表达式不会在重复反射实体类,减少反射时间,提升性能

 

此方法有三个重载

1.Register(Type type)

例如

1
EntityCache.Register(typeof("实体类"));

  

2.Register(Type []type)

可以通过反射获取实体类类型数组

3.Register(string assemblyString)

assemblyString:通过给定程序集的长格式名称加载程序集。

例如

1
EntityCache.Register("实体类层的类库名称");

  

完整Demo可以去Github上下载:

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

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

技术群 710217654

框架开源,可以加群下载源码

posted @   Kogel  阅读(4622)  评论(1编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示