🦄  FreeSql
FreeSql æ˜¯åŠŸèƒ½å¼ºå¤§çš„å¯¹è±¡å…³ç³»æ˜ å°„æŠ€æœ¯(O/RM),支�? .NETCore 2.1+ 或 .NETFramework 4.0+ 或 Xamarin。
- 支�? CodeFirst �?移,哪怕使用 Access 数�?�库也支�?;
- 支�? DbFirst 从数�?�库导入实体类,安装实体类生�?工具;
- 支�? æ·±å…¥çš„ç±»åž‹æ˜ å°„ï¼Œæ¯”å¦‚pgsql的数组类型;
- 支�? 丰富的表达�?函数,以�?��?�活的自定义解�?;
- 支�? 导航属性一对多�?å¤šå¯¹å¤šè´ªå©ªåŠ è½½ï¼Œä»¥ï¿½?ï¿½å»¶æ—¶åŠ è½½ï¼›
- 支�? 读写分离�?分表分库�?过滤器�?�?观�?�?悲观�?;
- 支�? MySql/SqlServer/PostgreSQL/Oracle/Sqlite/达梦/人大金仓/神州通用/Access;
📚  Documentation
FreeSql �??供多�?ä½¿ç”¨ä¹ æƒ¯ï¼Œè¯·æ ¹ï¿½?�实际情况选择团队�?�适的一�?:
- �?么FreeSql,原始用法;
- �?么FreeSql.Repository,仓储+工作�?ï¿½å…ƒä¹ æƒ¯ï¼›
- �?么FreeSql.DbContext,有点�?efcoreçš„ä½¿ç”¨ä¹ æƒ¯ï¼›
- �?么FreeSql.BaseEntity,求简�?�使用这个;
å¦ä¹ 项目
- zhontai.net Admin �?��?�管�?�系统
- A simple and practical CMS implememted by .NET Core 2.2
- 内容管�?�系统
🚀  Quick start
dotnet add package FreeSql.Provider.Sqlite
static IFreeSql fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=document.db")
.UseAutoSyncStructure(true) //自动�?�æ¥å®žä½“结构到数�?�库
.Build(); //请务必定义�? Singleton �?�例模�?
class Song {
[Column(IsIdentity = true)]
public int Id { get; set; }
public string Title { get; set; }
public string Url { get; set; }
public DateTime CreateTime { get; set; }
public ICollection<Tag> Tags { get; set; }
}
class Song_tag {
public int Song_id { get; set; }
public Song Song { get; set; }
public int Tag_id { get; set; }
public Tag Tag { get; set; }
}
class Tag {
[Column(IsIdentity = true)]
public int Id { get; set; }
public string Name { get; set; }
public int? Parent_id { get; set; }
public Tag Parent { get; set; }
public ICollection<Song> Songs { get; set; }
public ICollection<Tag> Tags { get; set; }
}🔎  Query
//OneToOne�?ManyToOne
fsql.Select<Tag>().Where(a => a.Parent.Parent.Name == "粤è¯").ToList();
//OneToMany
fsql.Select<Tag>().IncludeMany(a => a.Tags, then => then.Where(sub => sub.Name == "xxx")).ToList();
//ManyToMany
fsql.Select<Song>()
.IncludeMany(a => a.Tags, then => then.Where(sub => sub.Name == "xxx"))
.Where(s => s.Tags.AsSelect().Any(t => t.Name == "国è¯"))
.ToList();
//Other
fsql.Select<Xxx>()
.Where(a => a.IsDelete == 0)
.WhereIf(keyword != null, a => a.UserName.Contains(keyword))
.WhereIf(role_id > 0, a => a.RoleId == role_id)
.Where(a => a.Nodes.AsSelect().Any(t => t.Parent.Id == t.UserId))
.Count(out var total)
.Page(page, size)
.OrderByDescending(a => a.Id)
.ToList()fsql.Select<Song>().Where(a => new[] { 1, 2, 3 }.Contains(a.Id)).ToList();
fsql.Select<Song>().Where(a => a.CreateTime.Date == DateTime.Today).ToList();
fsql.Select<Song>().OrderBy(a => Guid.NewGuid()).Limit(10).ToList();�?  Repository
dotnet add package FreeSql.Repository
[Transactional]
public void Add() {
var repo = ioc.GetService<BaseRepository<Tag>>();
repo.DbContextOptions.EnableAddOrUpdateNavigateList = true;
var item = new Tag {
Name = "testaddsublist",
Tags = new[] {
new Tag { Name = "sub1" },
new Tag { Name = "sub2" }
}
};
repo.Insert(item);
}�?�考:在 asp.net core ä¸ä½¿ç”¨ TransactionalAttribute + UnitOfWorkManager 实现多�?äº‹åŠ¡ä¼ æ’
💪  Performance
FreeSql Query & Dapper Query
Elapsed: 00:00:00.6733199; Query Entity Counts: 131072; ORM: Dapper
Elapsed: 00:00:00.4554230; Query Tuple Counts: 131072; ORM: Dapper
Elapsed: 00:00:00.6846146; Query Dynamic Counts: 131072; ORM: Dapper
Elapsed: 00:00:00.6818111; Query Entity Counts: 131072; ORM: FreeSql*
Elapsed: 00:00:00.6060042; Query Tuple Counts: 131072; ORM: FreeSql*
Elapsed: 00:00:00.4211323; Query ToList<Tuple> Counts: 131072; ORM: FreeSql*
Elapsed: 00:00:01.0236285; Query Dynamic Counts: 131072; ORM: FreeSql*FreeSql ToList & Dapper Query
Elapsed: 00:00:00.6707125; ToList Entity Counts: 131072; ORM: FreeSql*
Elapsed: 00:00:00.6495301; Query Entity Counts: 131072; ORM: Dapper👯  Contributors
systemhejiyong�? LambertW�? mypeng1985�? stulzq�? movingsam�? ALer-R�? zouql�? 深圳|凉茶�? densen2014�? LiaoLiaoWuJu�? hd2y�? tky753�? feijie999�? constantine
(QQ群:4336577)
💕  Donation
L*y 58元�?花花 88元�?麦兜很乖 50元�?网络�?�者 2000元�?John 99.99元�?alex 666元�?bacongao 36元�?æ— ï¿½?? 100元�?Eternity 188元�?æ— ï¿½?? 10元�?⌒.Helper~..oO 66元�?ä¹ æƒ¯ä¸Žè¢«ä¹ æƒ¯ 100元�?æ— ï¿½?? 100元�?蔡易喋 88.88元�?ä¸è®¯ç§‘技 1000元�?Good Good Work 24元�?炽焰 6.6元�?Nothing 100å…ƒ
Thank you for your donation
![]() |
![]() |

.png)
.png)