Mapping to already existing database table

Brendan Vogt picture Brendan Vogt · Jan 13, 2012 · Viewed 7.8k times · Source

I am using Entity Framework 4.1 code first to connect to an already existing database. The table that I am using first is called Bank. I also have a Bank class as my domain model. This is how I mapped my class and table:

public class HbfContext : DbContext
{
     public DbSet<Bank> Banks { get; set; }

     protected override void OnModelCreating(DbModelBuilder modelBuilder)
     {
          modelBuilder.Entity<Bank>().ToTable("Bank");
     }
}

My Bank table:

BankID INT
BankName VARCHAR(50)

My Bank class looks like this:

public class Bank
{
     public int Id { get; set; }
     public string Name { get; set; }
     public bool IsActive { get; set; }
}

I am having issues when I want to return all the banks. The SQL statement returned from:

return db.Banks
     .OrderBy(x => x.Name);

is:

SELECT
     [Extent1].[Id] AS [Id],
     [Extent1].[Name] AS [Name],
     [Extent1].[IsActive] AS [IsActive]
FROM
     [dbo].[Bank] AS [Extent1]
ORDER BY
     [Extent1].[Name] ASC

This is not going to work because my table does not have the Id, Name and IsActive columns. How would I fix this and would EF map BankId to Id and BankName to Name automatically?

Answer

Ladislav Mrnka picture Ladislav Mrnka · Jan 13, 2012

You need to instruct EF to ignore IsActive property and map other properties. If you don't like data annotations you can do this with fluent API:

modelBuilder.Entity<Bank>().Ignore(b => b.IsActive);
modelBuilder.Entity<Bank>().Property(b => b.Id).HasColumnName("BankID");
modelBuilder.Entity<Bank>().Property(b => b.Name).HasColumnName("BankName");