翼度科技»论坛 编程开发 .net 查看内容

NET8 ORM 使用AOT SqlSugar

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
AOT介绍

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


 
SqlSugar ORM使用AOT


.NET AOT8 基本上能够免强使用了, SqlSugar ORM也支持了CRUD 能在AOT下运行了
Nuget安装
  1. SqlSugarCore
复制代码
具体代码
  1. StaticConfig.EnableAot = true;//启用AOT 程序启动执行一次就好了
  2. //用SqlSugarClient每次都new,不要用单例模式
  3. var db = new SqlSugarClient(new ConnectionConfig()
  4. {
  5. IsAutoCloseConnection = true,
  6. DbType = DbType.Sqlite,
  7. ConnectionString = "datasource=demo.db"
  8. },
  9. it =>
  10. {
  11. // Logging SQL statements and parameters before execution
  12. // 在执行前记录 SQL 语句和参数
  13. it.Aop.OnLogExecuting = (sql, para) =>
  14. {
  15. Console.WriteLine(UtilMethods.GetNativeSql(sql, para));
  16. };
  17. });
  18. return db;
  19. 已支持功能
  20. //查询
  21. var list=db.Queryable<Student>().ToList();
  22. var list2=db.Queryable<Student>().ToDataTable();
  23. var list3= db.Queryable<Student>().Select(it=>new {
  24. id=it.Id
  25. }).ToList();
  26. //插入 、删除和更新只要是实体目前测试下来 都OK
  27. db.Insertable(new Student()
  28. {
  29. Id = 1,
  30. Name = "aa"
  31. }).ExecuteCommand();
  32. db.Deleteable(new Student()
  33. {
  34. Id = 1,
  35. Name = "aa"
  36. }).ExecuteCommand();
  37. db.Updateable(new Student()
  38. {
  39. Id = 1,
  40. Name = "aa"
  41. }).ExecuteCommand();
  42. //写sql也支持
  43. db.Ado.GetDataTable(sql);
  44. db.Ado.ExecuteCommand(sql);
复制代码
  
不支功能
  1. //部分库建表不支持
  2. //动态建类不支持
复制代码
 
AOT配置教程

创建一个带AOT的类项目
 

 

 
新建一个rd.xml
  1. [/code]改项目文件
  2. [code]<Project Sdk="Microsoft.NET.Sdk.Web">
  3. <PropertyGroup>
  4. <TargetFramework>net8.0</TargetFramework>
  5. <Nullable>enable</Nullable>
  6. <ImplicitUsings>enable</ImplicitUsings>
  7. <InvariantGlobalization>true</InvariantGlobalization>
  8. <PublishAot>true</PublishAot>
  9. <Platforms>AnyCPU;x64</Platforms>
  10. </PropertyGroup>
  11. <ItemGroup>
  12. <RdXmlFile Include="rd.xml" />
  13. </ItemGroup>
复制代码
RdXmlFile这个重点引用我们新建的rd.xml (这个xml要能发布出去)
 
如何让自已代码支持AOT

1、不能有dynamic类型 可以用object替换
2、不能有emit可以用表达式树代替换
3、一些反射找不到构造函数或者Type需要配置xml 
4、反射不支持根据路径加载程序集,可以从一个类的Type中拿出来
5、发布出现c++错误,需在安装和更新VS的地方把 c++桌面 装上
6、发布要选x64 不支持x86 和arm
 

来源:https://www.cnblogs.com/sunkaixuan/archive/2023/11/17/17839825.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具