ð¦ ãFreeSql
FreeSql æ¯åè½å¼ºå¤§çå¯¹è±¡å ³ç³»æ å°ææ¯(O/RM)ï¼æ¯æ? .NETCore 2.1+ æ .NETFramework 4.0+ æ Xamarinã
- æ¯æ? CodeFirst è¿?ç§»ï¼åªæä½¿ç¨ Access æ°æ?®åºä¹æ¯æ?ï¼
- æ¯æ? DbFirst 仿°æ?®åºå¯¼å ¥å®ä½ç±»ï¼å®è£ å®ä½ç±»çæ?å·¥å ·ï¼
- æ¯æ? æ·±å ¥çç±»åæ å°ï¼æ¯å¦pgsqlçæ°ç»ç±»åï¼
- æ¯æ? 丰å¯ç表达å¼?彿°ï¼ä»¥å?ç?µæ´»çèªå®ä¹è§£æ?ï¼
- æ¯æ? 导èªå±æ§ä¸å¯¹å¤ã?å¤å¯¹å¤è´ªå©ªå è½½ï¼ä»¥å?å»¶æ¶å è½½ï¼
- æ¯æ? 读åå离ã?å表ååºã?è¿æ»¤å¨ã?ä¹?è§é?ã?æ²è§é?ï¼
- æ¯æ? MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/人大éä»/ç¥èéç¨/ç¿°é«/Accessï¼
ð ãDocumentation
FreeSql æ??ä¾å¤ç§?使ç¨ä¹ æ¯ï¼è¯·æ ¹æ?®å®é æ åµéæ©å¢éå?éçä¸ç§?ï¼
- è¦?ä¹FreeSqlï¼åå§ç¨æ³ï¼
- è¦?ä¹FreeSql.Repositoryï¼ä»å¨+å·¥ä½å?å ä¹ æ¯ï¼
- è¦?ä¹FreeSql.DbContextï¼æç¹å?efcoreç使ç¨ä¹ æ¯ï¼
- è¦?ä¹FreeSql.BaseEntityï¼æ±ç®å?使ç¨è¿ä¸ªï¼
示è项ç®
- zhontai.net Admin å?å?°ç®¡ç?ç³»ç»
- A simple and practical CMS implemented 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ã? JohnZhou2020ã? mafeng8
QQ群ï¼4336577(已满)ã?8578575(å¨çº¿)ã?52508226(å¨çº¿)
ð ã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å ã?åå©è·¯äº 300å ã? æ å?? 100å ã?è°ä¼? 99.99å ã?TCYM 66.66å ã?MOTA 5å ã?LDZXG 30å ã?Near 30å ã?å»ºç½ 66å ã?æ å?? 200å ã?LambertWu 100å ã?æ å?? 18.88å ã?ä¹é¾ 50å
Thank you for your donation