老WinForm中一个执行文件使用SQLite数据库

发布于:2025-02-10 ⋅ 阅读:(61) ⋅ 点赞:(0)

        EF6在老WinForm中停止更新了,但如果只是在win10上面使用,老的.net Framework 4.8框架有一个优势,编译后的执行文件很小。还有一些老类库也只能在老的.net Framework 4.8框架使用,所以微软还是保留了老的.net Framework 4.8框架。

        在老的.net Framework 4.8框架中,DB First模型中,可以像EFcore一样简单一条指令就建立数据库的连接和实体类轻松的使用吗?哦,可以的,用SqlSugar来ORM Sqlite, 用Costura.Fody打包成一个exe。

        1、VS2022 建一个老WinForm程序

2、安装这几个类库,其它类库会自己带出来

System.Data.SQLite

Costura.Fody

Newtonsoft.Json

SqlSugar

3、按SqlSugar的官网说明,加Sqlite数据库的连接代码:

namespace ormtest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            //创建数据库对象 (用法和EF Dappper一样通过new保证线程安全)
            SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString = "datasource=car.db",
                DbType = SqlSugar.DbType.Sqlite,
                IsAutoCloseConnection = true
            },

            db => {
                db.Aop.OnLogExecuting = (sql, pars) =>
                 {         
                  }; 
            });

            //查询表的所有
            var list = Db.Queryable<Car>().ToList();

            label1.Text = list.Count.ToString();

          //  Db.DbFirst.IsCreateAttribute().CreateClassFile("D:\\mycode2023\\ormtest\\Models", "ormtest");

        }
    }
}

这条代码,就是自动产生实体类,就是我想要的,第二个参数是名字空间:

Db.DbFirst.IsCreateAttribute().CreateClassFile("D:\\mycode2023\\ormtest\\Models", "ormtest");

4、编译后,在release目录中,发现Sqlite的dll还没有全部打包进exe,需要做如下配置:

FodyWeavers.xml文件中,这样配置:

<?xml version="1.0" encoding="utf-8"?>
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
  <Costura>
    <Unmanaged32Assemblies>
 SQLite.Interop
 </Unmanaged32Assemblies>
    <Unmanaged64Assemblies>
 SQLite.Interop
 </Unmanaged64Assemblies>
  </Costura>
</Weavers>

5、执行编译,把ormtest.exe和数据库car.db拷贝到桌面,运行,OK,一个执行文件单独运行,读取了car数据库中的Car表里面有7条记录。

查询数据,可以把全表都放到list中再用LINQ来查询。虽然没有EFcore方便,但也已经很不错了,很简单的在老框架中使用起来了。


网站公告

今日签到

点亮在社区的每一天
去签到