An entity-first design pattern for asp.net core.
Why?
Free, fast, easy, modular, hackable. Extend provided base classes for faster development.
Install
dotnet add package Wryco.EFirst --version 1.0.1
Example
"Create an entity."
Entity
public class Device: BaseIEntity
{
public Device()
{
CreatedAt = DateTime.UtcNow;
UpdatedAt = DateTime.UtcNow;
}
// Main
public int Id { get; set; }
public required string Name { get; set; }
// Meta
public DateTime CreatedAt { get; set; } = DateTime.Now;
public DateTime UpdatedAt { get; set; } = DateTime.Now;
public DateTime LastActiveAt { get; set; } = DateTime.Now;
}
"Reference it in your database context."
Context
public class ApplicationDbContext : BaseDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options): base(options){}
public DbSet<Device> Device { get; set; } = null!;
}
"Give it a repository."
Repository
public class DeviceRepository: BaseRepository<Device>
{
public DeviceRepository(ApplicationDbContext context) : base(context) { }
}
"Add the typical program.cs additions."
Program.cs
(...)
builder.Services.AddSharedInfrastructure<ApplicationDbContext>(DBConnectionString);
builder.Services.AddScoped<DeviceRepository>();
(...)
"And make it all accessible via API."
Controller
[ApiController]
[Route("api/device")]
public class DeviceController : BaseController<DeviceRepository, Device>
{
public DeviceController(DeviceRepository repository) : base(repository) { }
}
"That's it."
The above is all it takes to quickly scaffold a barebones API detailing:
| Method | Endpoint | Action | Description |
|---|---|---|---|
| GET | /api/device/ | index | gets all devices |
| GET | /api/device/id | show | gets specific device |
| POST | /api/device | create | creates a new device |
| PUT | /api/device | update | updates a device |
| DEL | /api/device | delete | deletes a device |