Getting Started
The Raiqub Expressions was split into 5 packages to better integrate with layered projects:
- Raiqub.Expressions
- Raiqub.Expressions.Reading
- Raiqub.Expressions.Writing
- Raiqub.Expressions.EntityFrameworkCore
- Raiqub.Expressions.Marten
Entity Framework Core
For projects going to use EF Core you need to follow these steps:
- Add the required NuGet package(s) for the database provider you'll be using, such as Microsoft.EntityFrameworkCore.SqlServer:
shell
dotnet add package Microsoft.EntityFrameworkCore.SqlServerpowershell
PM> Install-Package Microsoft.EntityFrameworkCore.SqlServershell
paket add nuget Microsoft.EntityFrameworkCore.SqlServer- Add the Raiqub.Expressions.EntityFrameworkCore library from NuGet:
shell
dotnet add package Raiqub.Expressions.EntityFrameworkCorepowershell
PM> Install-Package Raiqub.Expressions.EntityFrameworkCoreshell
paket add nuget Raiqub.Expressions.EntityFrameworkCore- Register your DbContext by using AddDbContextFactory extension method (more details on EF Core documentation):
csharp
services.AddDbContextFactory<YourDbContext>();- Register the session and session factories using the following extension method:
csharp
services.AddEntityFrameworkExpressions()
.AddSingleContext<YourDbContext>();Marten
For projects going to use Marten you need to follow these steps:
- Add the Raiqub.Expressions.Marten library from NuGet:
shell
dotnet add package Raiqub.Expressions.Martenpowershell
PM> Install-Package Raiqub.Expressions.Martenshell
paket add nuget Raiqub.Expressions.Marten- Register the session and session factories using the following extension method:
csharp
services.AddMartenExpressions()
.AddSingleContext();Using
Inject the appropriate session interface (IDbQuerySession for read sessions, IDbSession for read and write sessions) into your services, and use it read and write from/to database.
csharp
public class YourService
{
private readonly IDbSession _dbSession;
public YourService(IDbSession dbSession)
{
_dbSession = dbSession;
}
// ...
}csharp
public class YourService(IDbSession dbSession)
{
// ...
}You can also create specifications and query strategies. Here's an example of how to create a simple specification:
csharp
public class CustomerIsActive : Specification<Customer>
{
public override Expression<Func<Customer, bool>> ToExpression()
{
return customer => customer.IsActive;
}
}And here's an example of how to use the specification with database session:
csharp
// Assuming 'session' is of type IDbSession or IDbQuerySession and has been injected
var query = session.Query(new CustomerIsActive());
var customers = await query.ToListAsync();