🦄  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
- iusaas.com SaaS �业应用管�系统
- EasyCms �业建站,事业��使用的CMS管�系统
- 内容管�系统
🚀  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(已满)�8578575(在线)
💕  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å…ƒã€?兰州天擎赵 500å…ƒ
Thank you for your donation
| Alipay | |
|---|---|
![]() |
![]() |

.png)
.png)