CoreSharp.EntityFramework
8.0.0
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
The owner has unlisted this package.
This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package CoreSharp.EntityFramework --version 8.0.0
NuGet\Install-Package CoreSharp.EntityFramework -Version 8.0.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CoreSharp.EntityFramework" Version="8.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CoreSharp.EntityFramework" Version="8.0.0" />
<PackageReference Include="CoreSharp.EntityFramework" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CoreSharp.EntityFramework --version 8.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: CoreSharp.EntityFramework, 8.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=CoreSharp.EntityFramework&version=8.0.0
#tool nuget:?package=CoreSharp.EntityFramework&version=8.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
CoreSharp.EntityFramework
A set of reusable and optimized code for EF Core.
Features
- Implementations for
UnitOfWork
andRepository
pattern. - Implementations for
Store
pattern. - Track and store
DbContext
changes.
Installation
Install the package with Nuget.
dotnet add package CoreSharp.EntityFramework
Terminology
Entity
: Represents a domain object or business object.DbContext
: Manages database sessions and operations.UnitOfWork
(UoW): Manages transactions and database connections (a wrapper aroundDbContext
).Repository
: Abstracts data access, typically read-only.Store
: Manages data state, with read and write access.
Documentation
Important files
- Interfaces
- Abstracts
Query object
The Query object is just a convention for
delegate IQueryable<TEntity> Query<TEntity>(IQueryable<TEntity> query);
It is used optionally in Repositories
and Stores
overloads to adjust the DbSet<TEntity>
before querying it.
var highSchoolTeacherIds = (await teacherRepository
.GetAsync(query => query
.Where(teacher => teacher.TeacherType == TeacherType.HighSchool) // Filter
.Select(teacher => new Teacher // Project
{
Id = teacher.Id
})
.AsNoTracking())
.Select(teacher => teacher.Id)
.ToArray();
Use cases
Table of Contents
Repository pattern
- Define your entity.
using CoreSharp.EntityFramework.Entities.Abstracts;
public sealed class Teacher : EntityBase<Guid>
{
// Properties
public string Name { get; set; }
}
public sealed class SchoolDbContext : DbContext
{
// Properties
public DbSet<Teacher> Teachers { get; set; }
}
- Define your repository.
using CoreSharp.EntityFramework.Repositories.Interfaces;
public interface ITeacherRepository : IRepository<Teacher, Guid>
{
}
using CoreSharp.EntityFramework.Repositories.Abstracts;
public sealed class TeacherRepository : RepositoryBase<Teacher, Guid>, ITeacherRepository
{
// Constructors
public TeacherRepository(DbContext dbContext)
: base(dbContext)
{
}
}
- Define your UnitOfWork.
using CoreSharp.EntityFramework.Repositories.Interfaces;
public interface ISchoolUnitOfWork : IUnitOfWork
{
// Properties
ITeacherRepository Teachers { get; }
}
using CoreSharp.EntityFramework.Repositories.Abstracts;
public sealed class SchoolUnitOfWork : UnitOfWorkBase, ISchoolUnitOfWork
{
// Fields
private ITeacherRepository _teachers;
// Constructors
public AppUnitOfWork(SchoolDbContext schoolDbContext)
: base(schoolDbContext)
{
}
// Properties
public ITeacherRepository Teachers
=> _teachers ??= new TeacherRepository(Context);
}
- Register UnitOfWork.
public static IServiceProvider AddDatabase(this IServiceCollection serviceCollection)
{
serviceCollection.AddScoped<ISchoolUnitOfWork, SchoolUnitOfWork>();
return serviceCollection;
}
- Inject and use UnitOfWork.
public sealed class SchoolManager
{
private readonly ISchoolUnitOfWork _unitOfWork;
public SchoolManager(ISchoolUnitOfWork unitOfWork)
=> _unitOfWork = unitOfWork;
public Task<IEnumerable<Teacher>> GetTeachersAsync()
=> _unitOfWork.Teachers.GetAsync();
public async Task AddTeachersAsync(Teacher teacherToAdd)
{
await _unitOfWork.Teachers.AddAsync(teacherToAdd);
await _unitOfWork.CommitAsync();
}
}
Store pattern
- Define your entity.
using CoreSharp.EntityFramework.Entities.Abstracts;
public sealed class Teacher : EntityBase<Guid>
{
// Properties
public string Name { get; set; }
}
public sealed class SchoolDbContext : DbContext
{
// Properties
public DbSet<Teacher> Teachers { get; set; }
}
- Define your store.
using CoreSharp.EntityFramework.Stores.Interfaces;
public interface ITeacherStore : IStore<Teacher, Guid>
{
}
using CoreSharp.EntityFramework.Stores.Abstracts;
public sealed class TeacherStore : StoreBase<Teacher, Guid>, ITeacherStore
{
// Constructors
public TeacherStore(DbContext dbContext)
: base(dbContext)
{
}
}
- Register store.
public static IServiceProvider AddDatabase(this IServiceCollection serviceCollection)
{
serviceCollection.AddScoped<ISteacherStore, TeacherStore>();
return serviceCollection;
}
- Inject and use store.
public sealed class SchoolManager
{
private readonly ITeacherStore _teacherStore;
public SchoolManager(ITeacherStore teacherStore)
=> _teacherStore = teacherStore;
public Task<IEnumerable<Teacher>> GetTeachersAsync()
=> _teacherStore.Teachers.GetAsync();
public Task AddTeachersAsync(Teacher teacherToAdd)
=> _teacherStore.Teachers.AddAsync(teacherToAdd);
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- CoreSharp (>= 7.5.1)
- Microsoft.EntityFrameworkCore (>= 8.0.6)
- Microsoft.EntityFrameworkCore.Relational (>= 8.0.6)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
8.0.1 | 133 | 12/28/2024 |
-chore: Update to .NET 8 and refactor nullable conditions.