arch/UnitOfWork
arch/UnitOfWork has 1,377 GitHub stars and 343 forks. GitHot measured 0 stars in 24 hours and -1 in 7 days. Last checked 2026-11-11 21:35 UTC. Last push 2023-01-08.
Comment ces chiffres sont mesurés
A plugin for Microsoft.EntityFrameworkCore to support repository, unit of work patterns, multiple database with distributed transaction supported, and MySQL multiple databases/tables sharding supported.
Progression mesurée des étoiles
- in 24h
- 0
- in 7 days
- -1
- in 15 days
- Mise à jour retardée
- in 1 month
- Mise à jour retardée
Variations nettes sur des périodes qui se chevauchent, pas des totaux quotidiens. Les mesures absentes restent vides. Les étoiles indiquent l’intérêt, pas la qualité.
README.md
OriginalUnitOfWork
A plugin for Microsoft.EntityFrameworkCore to support repository, unit of work patterns, and multiple database with distributed transaction supported.
Support MySQL multiple databases/tables sharding
In MySQL, physically, a schema is synonymous with a database. You can substitute the keyword SCHEMA instead of DATABASE in MySQL SQL syntax, for example using CREATE SCHEMA instead of CREATE DATABASE. Some other database products draw a distinction. For example, in the Oracle Database product, a schema represents only a part of a database: the tables and other objects owned by a single user.
So, for MySQL, the easy way to support this feature is to dynamically change the SCHEMA at the runtime.
After v1.1.2 had support MySQL multiple databases/tables sharding in the same model in the same machine. For different machine, you can use DbContextFactory to dynamically create DbContext. You can use Pomelo.EntityFrameworkCore.MySql to test this feature. @PomeloFoundation
Quickly start
How to use UnitOfWork
public void ConfigureServices(IServiceCollection services)
{
// use in memory for testing.
services
.AddDbContext<QuickStartContext>(opt => opt.UseInMemoryDatabase())
.AddUnitOfWork<QuickStartContext>()
.AddCustomRepository<Blog, CustomBlogRepository>();
}
private readonly IUnitOfWork _unitOfWork;
// 1. IRepositoryFactory used for readonly scenario;
// 2. IUnitOfWork used for read/write scenario;
// 3. IUnitOfWork<TContext> used for multiple databases scenario;
public ValuesController(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
// Change database only work for MySQL right now.
unitOfWork.ChangeDatabase($"uow_db_{DateTime.Now.Year}");
var userRepo = unitOfWork.GetRepository<User>();
var postRepo = unitOfWork.GetRepository<Post>();
var ym = DateTime.Now.ToString("yyyyMM");
userRepo.ChangeTable($"user_{ym}");
postRepo.ChangeTable($"post_{ym}");
var user = new User
{
UserName = "rigofunc",
Password = "password"
};
userRepo.Insert(user);
var post = new Post
{
UserId = user.UserId,
Content = "What a piece of junk!"
};
postRepo.Insert(post);
unitOfWork.SaveChanges();
var find = userRepo.Find(user.UserId);
find.Password = "p@ssword";
unitOfWork.SaveChanges();
// projection
}
Projection & Including
// projection
var pagedList = _unitOfWork.GetRepository<Blog>().GetPagedList(b => new { Name = b.Title, Link = b.Url }, pageIndex: pageIndex, pageSize: pageSize);
var projection = _unitOfWork.GetRepository<Blog>().GetFirstOrDefault(b => new { Name = b.Title, Link = b.Url }, predicate: x => x.Title.Contains(term));
// including
[HttpGet]
public async Task<IPagedList<Blog>> Get()
{
return await _unitOfWork.GetRepository<Blog>().GetPagedListAsync(include: source => source.Include(blog => blog.Posts).ThenInclude(post => post.Comments));
}
Explorer des projets similaires
Asabeneh/30-Days-Of-Python
Le défi de programmation 30 Days of Python est un guide pas à pas pour apprendre le langage de programmation Python en 30 jours. Ce défi peut prendre plus de 100 jours. Avancez à votre rythme. Ces vidéos peuvent aussi vous aider : https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,618 étoilesgrafana/grafana
Plateforme ouverte et composable d’observabilité et de visualisation de données. Visualise les métriques, les journaux et les traces issus de plusieurs sources, comme Prometheus, Loki, Elasticsearch, InfluxDB, Postgres et bien d’autres.
77,859 étoilesredis/redis
Pour les développeurs qui créent des applications en temps réel pilotées par les données, Redis est le cache, le serveur de structures de données et le moteur de requêtes documentaires et vectorielles préféré, le plus rapide et le plus riche en fonctionnalités.
77,472 étoilesapache/superset
Apache Superset est une plateforme de visualisation et d'exploration de données.
75,495 étoiles