NET8 ORM 使用AOT SqlSugar

  • NET8 ORM 使用AOT SqlSugar已关闭评论
  • 107 次浏览
  • A+
所属分类:.NET技术
摘要

.Net8的本地预编机器码AOT,它几乎进行了100%的自举。微软为了摆脱C++的钳制,做了很多努力。也就是代码几乎是用C#重写,包括了虚拟机,GC,内存模型等等。而需要C++做的,也就仅仅是引导程序,本篇通过代码来看下这段至关重要的引导程序的运作模式。


AOT介绍

.Net8的本地预编机器码AOT,它几乎进行了100%的自举。微软为了摆脱C++的钳制,做了很多努力。也就是代码几乎是用C#重写,包括了虚拟机,GC,内存模型等等。而需要C++做的,也就仅仅是引导程序,本篇通过代码来看下这段至关重要的引导程序的运作模式。

 

支持功能

NET8 ORM 使用AOT SqlSugar

 

SqlSugar ORM使用AOT

.NET AOT8 基本上能够免强使用了, SqlSugar ORM也支持了CRUD 能在AOT下运行了

Nuget安装

SqlSugarCore

具体代码

StaticConfig.EnableAot = true;//启用AOT 程序启动执行一次就好了  //用SqlSugarClient每次都new,不要用单例模式 var db = new SqlSugarClient(new ConnectionConfig() { IsAutoCloseConnection = true, DbType = DbType.Sqlite, ConnectionString = "datasource=demo.db"  }, it => { // Logging SQL statements and parameters before execution // 在执行前记录 SQL 语句和参数 it.Aop.OnLogExecuting = (sql, para) => { Console.WriteLine(UtilMethods.GetNativeSql(sql, para)); }; }); return db; 已支持功能 //查询 var list=db.Queryable<Student>().ToList(); var list2=db.Queryable<Student>().ToDataTable(); var list3= db.Queryable<Student>().Select(it=>new { id=it.Id }).ToList();  //插入 、删除和更新只要是实体目前测试下来 都OK db.Insertable(new Student() { Id = 1, Name = "aa" }).ExecuteCommand(); db.Deleteable(new Student() { Id = 1, Name = "aa" }).ExecuteCommand(); db.Updateable(new Student() { Id = 1, Name = "aa" }).ExecuteCommand();  //写sql也支持 db.Ado.GetDataTable(sql); db.Ado.ExecuteCommand(sql); 

  

不支功能

//部分库建表不支持 //动态建类不支持

 

AOT配置教程

创建一个带AOT的类项目

 

NET8 ORM 使用AOT SqlSugar

 NET8 ORM 使用AOT SqlSugar

 

新建一个rd.xml

<Directives> <Application> <Assembly Name="SqlSugar" Dynamic="Required All"> </Assembly> </Application> </Directives>

改项目文件

<Project Sdk="Microsoft.NET.Sdk.Web">  <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <InvariantGlobalization>true</InvariantGlobalization> <PublishAot>true</PublishAot> <Platforms>AnyCPU;x64</Platforms> </PropertyGroup> <ItemGroup> <RdXmlFile Include="rd.xml" /> </ItemGroup>

RdXmlFile这个重点引用我们新建的rd.xml (这个xml要能发布出去)
 

如何让自已代码支持AOT

1、不能有dynamic类型 可以用object替换

2、不能有emit可以用表达式树代替换

3、一些反射找不到构造函数或者Type需要配置xml 

4、反射不支持根据路径加载程序集,可以从一个类的Type中拿出来

5、发布出现c++错误,需在安装和更新VS的地方把 c++桌面 装上

6、发布要选x64 不支持x86 和arm