mysql .net orm_GitHub - wulinacha/FreeSql: .NET orm, Mysql orm, Postgresql orm, SqlServer orm, Orac...

🦄  FreeSql

68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4672656553716c2e7376673f7374796c653d666c61742d73717561726568747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4672656553716c2e7376673f7374796c653d666c61742d73717561726568747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667

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.DbContext,有点像efcore的使用习惯;

示范项目

functions11.png

🚀  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 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 Songs { get; set; }

public ICollection Tags { get; set; }

}

🔎  Query

//OneToOne、ManyToOne

fsql.Select().Where(a => a.Parent.Parent.Name == "粤语").ToList();

//OneToMany

fsql.Select().IncludeMany(a => a.Tags, then => then.Where(sub => sub.Name == "xxx")).ToList();

//ManyToMany

fsql.Select()

.IncludeMany(a => a.Tags, then => then.Where(sub => sub.Name == "xxx"))

.Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语"))

.ToList();

//Other

fsql.Select()

.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().Where(a => new[] { 1, 2, 3 }.Contains(a.Id)).ToList();

fsql.Select().Where(a => a.CreateTime.Date == DateTime.Today).ToList();

fsql.Select().OrderBy(a => Guid.NewGuid()).Limit(10).ToList();

🚁  Repository

dotnet add package FreeSql.Repository

[Transactional]

public void Add() {

var repo = ioc.GetService>();

repo.DbContextOptions.EnableAddOrUpdateNavigateList = true;

var item = new Tag {

Name = "testaddsublist",

Tags = new[] {

new Tag { Name = "sub1" },

new Tag { Name = "sub2" }

}

};

repo.Insert(item);

}

💪  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 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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值