Installation
You can install the package directly from Nuget NeatMapper.EntityFrameworkCore.
Configuring the services
While configuring your services simply add:
services.AddDbContext<TestContext>();
services.AddNeatMapper();
// This configures everything needed
services.AddNeatMapperEntityFrameworkCore<TestContext>();
Mapping objects
var mapper = serviceProvider.GetRequiredService<IMapper>();
var asyncMapper = serviceProvider.GetRequiredService<IMapper>();
var projector = serviceProvider.GetRequiredService<IProjector>();
// Map a key to its entity
var entity = mapper.Map<MyEntity>(2);
var entity = await asyncMapper.MapAsync<MyEntity>(2);
// Map a composite key to an entity with tuples (System.Tuple or System.ValueTuple),
// notice the double parentheses
var entity = await asyncMapper.MapAsync<MyEntityWithCompositeKey>((2, "StringKey"));
// Map multiple keys to their respective entities
var entities = await asyncMapper.MapAsync<MyEntity[]>(new int[]{ 2, 3, ... });
// Map an entity to its key(s)
(int MyIntKey, string MyStringKey) = mapper.Map<(int, string)>(myEntity);
// Project an entity into its key
var myEntitiesKeys = db.Set<MyEntity>()
.Project<int>(projector)
.ToArray();
// Create a filtering expression from key(s)
var expr1 = mapper.Map<Expression<Func<MyEntity, bool>>>(2);
// entity => entity.Id == 2
var expr2 = mapper.Map<Expression<Func<MyEntity, bool>>>(new int[]{ 2, 3, ... });
// entity => new int[]{ 2, 3, ... }.Contains(entity.Id)
var expr3 = mapper.Map<Expression<Func<MyEntityWithCompositeKey, bool>>>(new []{ (2, "StringKey1"), (3, "StringKey2"), ... });
// entity => (entity.MyIntKey == 2 && entity.MyStringKey == "StringKey1") || (entity.MyIntKey == 3 && entity.MyStringKey == "StringKey2") || ...