Code-first: Mapping entities to existing database tables

.net, c#, entity-framework, entity-framework-5, entity-framework-6

Solution

You can use the

[Table("Project")] 
public class Project {
....
}

annotation against the Project entity, or in the `OnModelCreating(DbModelBuilder modelBuilder)` you can call `modelBuilder.Entity<Project>().ToTable("Project");`.

Both would do the same thing.

Problem

I am using Entity Framework 6 code-first with an existing database, but having problems mapping my entities to the database tables. Normally, I would use database-first approach and have my entity and context code generated, but using the designer has become a huge pain. I have set Database.SetInitializer(null) as I do not want EF to change my schema. Database schema: Code-first: ``` public class Project { public int ProjectId { get; set; } public string Name { get; set; } public string Description { get; set; } } public class ReleaseControlContext : DbContext { public ReleaseControlContext() : base(ConfigurationManager.ConnectionStrings["ReleaseControl"].ConnectionString) { Database.SetInitializer<ReleaseControlContext>(null); } public DbSet<Project> Projects { get; set; } } ``` Calling code: ``` using(var context = new ReleaseControlContext()) { var projects = context.Projects.ToList(); } ``` The following exception is thrown: SqlException: Invalid object name 'dbo.Projects'. This is because my database table is Project and not Projects. I don't want to rename my context's `DbSet<Project>` to "Project" because that would be semantically incorrect. Question: Do I have to use the fluent API/data annotations to map between the Project database table and the `DbSet<Project> Projects` collection?

Original source