Facet.Extensions
1.6.0
See the version list below for details.
dotnet add package Facet.Extensions --version 1.6.0
NuGet\Install-Package Facet.Extensions -Version 1.6.0
<PackageReference Include="Facet.Extensions" Version="1.6.0" />
<PackageVersion Include="Facet.Extensions" Version="1.6.0" />
<PackageReference Include="Facet.Extensions" />
paket add Facet.Extensions --version 1.6.0
#r "nuget: Facet.Extensions, 1.6.0"
#:package Facet.Extensions@1.6.0
#addin nuget:?package=Facet.Extensions&version=1.6.0
#tool nuget:?package=Facet.Extensions&version=1.6.0
This is a new project, any help, feedback and contributions are highy appreciated.
Facet
"One part of a subject, situation, object that has many parts."
Facet is a C# source generator that lets you define lightweight projections (DTOs, API models, etc.) directly from your domain models — without writing boilerplate.
It generates partial classes or records with constructors, optional LINQ projections, and even supports custom mappings — all at compile time, with zero runtime cost.
- ✅ Generate classes or records from existing types
- ✅ Exclude fields/properties you don't want (basically create a Facetted view of your model))
- ✅ Include public fields (optional)
- ✅ Auto-generate constructors for fast mapping
- ✅ LINQ projection expressions
(Expression<Func<TSource,TTarget>>)
- ✅ Custom mapping via
IFacetMapConfiguration
- ✅ Use in EF Core queries by using
Facet.Extensions
Quick Start
1. Install
dotnet add package Facet
2. Define facet
using Facet;
public class Person
{
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
}
// Generate a DTO that excludes Email
[Facet(typeof(Person), exclude: nameof(Person.Email))]
public partial class PersonDto;
This generates a PersonDto with only Name and Age, and a constructor that copies values.
3. Use your generated facets
var person = new Person { Name = "Alice", Email = "a@b.com", Age = 30 };
var dto = new PersonDto(person);
LINQ projection support:
var query = dbContext.People
.Select(PersonDto.Projection)
.ToList();
Advanced scenarios
Records
[Facet(typeof(Person), Kind = FacetKind.Record)]
public partial record PersonRecord;
`
Custom mapping
Eg. you need to compile extra fields
public class UserMapConfig : IFacetMapConfiguration<User, UserDto>
{
public static void Map(User source, UserDto target)
{
target.FullName = $"{source.FirstName} {source.LastName}";
}
}
[Facet(typeof(User), Configuration = typeof(UserMapConfig))]
public partial class UserDto;
This lets you add derived properties, formatting, etc.
Facet.Extensions for LINQ/EF Core async
Install Facet.Extensions for one-line mapping helpers:
dotnet add package Facet.Extensions
Then:
using Facet.Extensions;
// Single object
var dto = person.ToFacet<Person, PersonDto>();
// Lists
var dtos = people.SelectFacets<Person, PersonDto>();
// IQueryable deferred projection
var query = dbContext.People.SelectFacet<Person, PersonDto>();
And with EF Core:
var dtos = await dbContext.People.ToFacetsAsync<Person, PersonDto>();
var single = await dbContext.People.FirstFacetAsync<Person, PersonDto>();
Facet - Define less, project more.
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. |
-
net8.0
- Facet (>= 1.6.0)
- Microsoft.EntityFrameworkCore (>= 6.0.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Facet.Extensions:
Package | Downloads |
---|---|
Facet.Extensions.EFCore
EF Core async extension methods for Facet. |
|
Facet.Mapping.Expressions
Expression tree transformation and mapping utilities for Facet DTOs. Transform predicates, selectors, and other expressions between source entities and their Facet projections. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
2.7.0 | 0 | 9/12/2025 |
2.6.2 | 8 | 9/12/2025 |
2.6.1 | 82 | 9/10/2025 |
2.6.0 | 92 | 9/9/2025 |
2.5.0 | 256 | 9/4/2025 |
2.4.8 | 164 | 9/3/2025 |
2.4.7 | 208 | 9/1/2025 |
2.4.6 | 129 | 9/1/2025 |
2.4.5 | 190 | 8/30/2025 |
2.4.4 | 319 | 8/27/2025 |
2.4.3 | 182 | 8/27/2025 |
2.4.2 | 178 | 8/27/2025 |
2.4.0 | 206 | 8/26/2025 |
2.3.0 | 1,430 | 8/20/2025 |
2.2.0 | 156 | 8/20/2025 |
2.1.0 | 260 | 8/18/2025 |
2.0.1 | 579 | 8/5/2025 |
2.0.0 | 148 | 8/4/2025 |
1.9.3 | 133 | 7/4/2025 |
1.8.0 | 162 | 6/4/2025 |
1.7.0 | 202 | 5/6/2025 |
1.6.0 | 146 | 4/27/2025 |
1.5.0 | 171 | 4/27/2025 |