Reputation: 627
I have an existing database that we are using EF Core and trying to generate more "business" name for our entities. I see how you can use data annotations when using the code-first model, but am not seeing a way to use this feature with the database-first model.
For example I have a table name tblStudents
, but I want the entity to be Students
. If I'm using code-first, I can have a file called Students.cs
as shown below, and when I generate to the database it would create a table called tblStudents
.
using System.ComponentModel.DataAnnotations.Schema;
namespace MyDatabase.Entities
{
[Table("tlbStudents")]
public class Students
{
public int StudentId { get; set; }
public string? FirstName { get; set; }
public string? LastName { get; set; }
}
}
I want to go the other direction. I want to scaffold from the database and have it generate a file Students.cs
and point to table tblStudents
. With the older EF (not core), there was a wizard that you could do this with, but I'm not seeing anything in the documentation to support this.
Is it just not possible?
Upvotes: 2
Views: 275
Reputation: 143098
Custom Reverse Engineering Templates (available since EF Core 7) were introduced for specifically such tasks. They are based on the T4 templates.
First install the Microsoft.EntityFrameworkCore.Templates
for dotnet new
:
dotnet new install Microsoft.EntityFrameworkCore.Templates
Then add templates to the project:
dotnet new ef-templates
Which will result in 2 files added to the project - DbContext.t4
and EntityType.t4
:
The
DbContext.t4
template is used to scaffold a DbContext class for the database, and theEntityType.t4
template is used to scaffold entity type classes for each table and view in the database.
Then modify them according to your needs. I believe something like the following in EntityType.t4
should do the trick (not tested):
<#
var actualName = EntityType.Name.Replace("tlb", "");
#>
[System.ComponentModel.DataAnnotations.Schema.TableAttribute("<#= EntityType.Name #>")]
public partial class <#= actualName #>
{
Upvotes: 2