Dominic Zukiewicz
Dominic Zukiewicz

Reputation: 8444

Referencing schema names for tables in the Entity Framework

How do you explicitally tell EF that a table lies in a specific schema?

For example, the AdventureWorks database defines the Production.Product table. When using the OnModelCreating method, I use the following code:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    EntityTypeConfiguration<Product> config = modelBuilder.Entity<Product>();

    config.HasKey(p => p.ProductID);
    config.Property(p => p.Price).HasColumnName("ListPrice");
    config.ToTable("Product");
}

However, when it is run, it says it Invalid object name: dbo.Product.

I have tried:

config.ToTable("Production.Product");
//and
config.HasEntityName("Production");

but both fail as well.

Upvotes: 6

Views: 2304

Answers (2)

David Sopko
David Sopko

Reputation: 5623

The table schema can also be specified using data annotations using the optional parameter 'Schema' on the 'Table' attribute.

using System.ComponentModel.DataAnnotations.Schema;

[Table("Product", Schema="Production")]
public class Product
{
    public int ProductID { get; set; }
    public decimal Price { get; set; }
}

Upvotes: 0

Ladislav Mrnka
Ladislav Mrnka

Reputation: 364269

ToTable has overloaded version which accepts two parameters: table name and schema name so correct version is:

config.ToTable("Product", "Production");

Upvotes: 14

Related Questions