最近很多 .net QQ 群无故被封停 , 特别是 wpf 群几乎全军覆没 。依乐祝的 .net6交流群,晓晨的 .net跨平台交流群 , 导致很多码友流离失所无家可归,借此机会使用一次召唤术 , 有需要的请加群:560611514【.NET C#爱好者】,6406277【C#/.Net Core社区】,822074314【DotNet开发交流群】
前言看到标题点进来 , 也许有人问,为什么不用 mysql , 为什么不用 sqlite,为什么不这样那样 。
其实有时候情非得已,被迫使用不由得自己选择,没有谁天天做新项目,新项目当然不会选 Access 数据库,复杂的业务群体对方发送过来的文件是 Access 也没得选 , 难道可以要求对方公司换数据库?
Microsoft Office Access是由微软发布的关系数据库管理系统 。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一 。
Microsoft Office Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统 。它是微软OFFICE的一个成员, 在包括专业版和更高版本的office版本里面被单独出售 。2018年9月25日,最新的微软Office Access 2019在微软Office 2019里发布 。
MS ACCESS以它自己的格式将数据存储在基于Access Jet的数据库引擎里 。它还可以直接导入或者链接数据(这些数据存储在其他应用程序和数据库) 。
C#.NET 访问 Access 数据库从 .NETframework 1.0 到现今的 dotnet-7.0,访问 Access 数据库都只能用 oledb 方式,微软历史访问数据库的方式有许多种(ado、odbc、oledb、ado.net),oledb 是其中的一种 。
连接字符串常见的有两种:
- Provider=Microsoft.Jet.OleDb.4.0;Data Source=d:/accdb/2003.mdb
- Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:/accdb/2007.accdb
FreeSql 介绍.NET ORM Object Relational Mapping 是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术 。
FreeSql .NET ORM 支持 .NetFramework4.0+、.NetCore、Xamarin、MAUI、Blazor、以及还有说不出来的运行平台,因为代码绿色无依赖,支持新平台非常简单 。目前单元测试数量:8500+,Nuget下载数量:1M+ 。使用最宽松的开源协议 MIT https://github.com/dotnetcore/FreeSql,可以商用,文档齐全,甚至拿去卖钱也可以 。
FreeSql 主要优势在于易用性上,基本是开箱即用,在不同数据库之间切换兼容性比较好 , 整体的功能特性如下:
- 支持 CodeFirst 对比结构变化迁移、DbFirst 从数据库生成实体类;
- 支持 丰富的表达式函数,独特的自定义解析;
- 支持 批量添加、批量更新、BulkCopy、导航属性 , 贪婪加载、延时加载、级联保存、级联删除;
- 支持 读写分离、分表分库,租户设计,分布式事务;
- 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/神通/人大金仓/翰高/Clickhouse/MsAccess Ado.net 实现包 , 以及 Odbc 的专门实现包;
dotnet add packages FreeSql.Provider.MsAccess
public class DB{static Lazy<IFreeSql> accessLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MsAccess, "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:/accdb/2007.accdb")//.UseAutoSyncStructure(true) 自动建表,适合新项目.UseNoneCommandParameter(true).UseMonitorCommand(cmd => Trace.WriteLine(cmd.CommandText)).Build());public static IFreeSql access => accessLazy.Value;}
定义 DB.cs 类之后就可以快乐的 CRUD 了 。FreeSql 提供多种 CRUD 使用习惯,请根据实际情况选择团队合适的一种:- 要么 FreeSql,原始用法;
- 要么 FreeSql.Repository,仓储 + 工作单元习惯;
- 要么 FreeSql.DbContext,很像 EFCore 的使用习惯,兼容 EFCore 99% 的实体注解;
- 要么 FreeSql.BaseEntity,充血模式;
- 要么 直接像 dapper 那样使用 SqlConnection 扩展方法;
DB.access.Select<T>(); //查询DB.access.Insert<T>(); //插入DB.access.Update<T>(); //更新DB.access.Delete<T>(); //删除DB.access.InsertOrUpdate<T>()// 插入或更新DB.access.Transaction(..); //事务DB.access.CodeFirst; //CodeFirst 对象DB.access.DbFirst; //DbFirst 对象DB.access.Ado; //Ado 对象DB.access.Aop; //Aop 对象DB.access.GlobalFilter; //全局过滤器对象var blogs = DB.access.Select<Blog>().Where(b => b.Rating > 3).OrderBy(b => b.Url).Page(2, 10).ToList();var blog = new Blog { Url = "http://sample.com" };blog.BlogId = (int)DB.access.Insert(blog).ExecuteIdentity();DB.access.Update<Blog>().Set(b => b.Url, "http://sample2222.com").Where(b => b.Url == "http://sample.com").ExecuteAffrows();DB.access.Delete<Blog>().Where(b => b.Url == "http://sample.com").ExecuteAffrows();// 等等等 。。级联保存、级联查询、导航属性 。。。
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 怎么帮朋友转发他的朋友圈(如何幽默的让别人帮你转发朋友圈)
- 如何在微信的朋友圈转发己发过的东西(微信怎么转发别人以前发的朋友圈)
- 新手应该如何玩王者荣耀(新手上王者需要多久)
- ipad如何下载刺激战场国际服(ipad从哪下载刺激战场国际服)
- 24 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何优雅地在正式和测试环境之间来回切换-中篇
- 苹果手机如何设置语音通话铃声(苹果手机铃声开启方法)
- 用手机怎么发微信朋友圈(微信如何用手机发朋友圈)
- 抖音怎么跟自己合拍,抖音如何和自己合拍视频
- 微信聊天记录怎么恢复原来这么简单的啊(微信被误卸载了如何恢复聊天记录)
- 两个抖音号如何申请开直播(两个抖音号同时直播同一场景)