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

时间:2023-03-09 09:51:16
[LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射

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

目录

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

1.[Identity]可以标识主键

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

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

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

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

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

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

[Display(Rename = "users")]
public class testusers
{
[Display(Rename ="Content")]
public string testName222 { get; set; }
}

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

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

执行效果

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

查询时需要使用 FieldMatch<实体类>() 函数匹配映射实体类(3.1.8.5版本后不需要)

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

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

这时就需要使用AsName

[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)] 特性标识

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

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

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

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

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

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

然后实体类

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

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

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

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

3.实体类预加载

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

此方法有三个重载

1.Register(Type type)

例如

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

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

2.Register(Type []type)

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

3.Register(string assemblyString)

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

例如

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

  

完整Demo可以去Github上下载:

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

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

技术群 710217654

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