The Wayback Machine - https://web.archive.org/web/20201125120704/https://github.com/dotnetcore/FreeSql
Skip to content
master
Go to file
Code

Files

Permalink
Failed to load latest commit information.

readme.md

🦄  FreeSql

nuget stats GitHub license

FreeSql 是功能强大的对象关系映射技术(O/RM),支� .NETCore 2.1+ 或 .NETFramework 4.0+ 或 Xamarin。

  • 支æŒ? CodeFirst è¿?移,哪怕使用 Access æ•°æ?®åº“也支æŒ?ï¼›
  • 支æŒ? DbFirst 从数æ?®åº“导入实体类,安装实体类生æˆ?工具;
  • 支æŒ? 深入的类型映射,比如pgsql的数组类型;
  • 支æŒ? 丰富的表达å¼?函数,以å?Šç?µæ´»çš„自定义解æž?ï¼›
  • 支æŒ? 导航属性一对多ã€?多对多贪婪加载,以å?Šå»¶æ—¶åŠ è½½ï¼›
  • 支æŒ? 读写分离ã€?分表分库ã€?过滤器ã€?ä¹?è§‚é”?ã€?悲观é”?ï¼›
  • 支æŒ? MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/人大金仓/神舟通用/翰高/Accessï¼›

📚  Documentation

《新人学习指引》 | 《Select》 | 《Update》 | 《Insert》 | 《Delete》
《表达�函数》 | 《CodeFirst》 | 《DbFirst》 | 《过滤器》
《Repository》 | 《UnitOfWork》 | 《AOP》 | 《DbContext》
《读写分离》 | 《分表分库》 | 《黑科技》 | 《常�问题》 | 更新日志

FreeSql æ??供多ç§?使用习惯,请根æ?®å®žé™…情况选择团队å?ˆé€‚的一ç§?:

  • è¦?么FreeSql,原始用法;
  • è¦?么FreeSql.Repository,仓储+工作å?•元习惯;
  • è¦?么FreeSql.DbContext,有点åƒ?efcore的使用习惯;
  • è¦?么FreeSql.BaseEntity,求简å?•使用这个;

示范项目

🚀  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()

More..

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();

More..

�  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

More..

👯  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

About

🦄 .NET orm, Mysql orm, Postgresql orm, SqlServer orm, Oracle orm, Sqlite orm, Firebird orm, 达梦 orm, 人大金仓 orm, 神通 orm, 翰高 orm, MsAccess orm.

Topics

Resources

License

Languages

You can’t perform that action at this time.