Search code examples
entity-framework

Entity Framework 6 - Code First: table schema from classes' namespace


Does any know if one can set the table schema of code first classes based on the classes' namespace?

For example, every class in namespace Core.Foo would have a schema of Foo.


Solution

  • Well, you could specify the schema name using one of these two options:

    • Using Data Annotations:

      [Table("TableName","Foo")]
      public class Entity
      {
      }
      
    • Using Fluent Api:

      modelBuilder.Entity<Entity>().ToTable("TableName", "Foo");
      

    Update

    Digging more in this subject, I think what you looking for is a Custom Convention of EF:

    public class CustomSchemaConvention : Convention
    {
        public CustomSchemaConvention()
        {
            Types().Configure(c => c.ToTable(c.ClrType.Name, c.ClrType.Namespace.Substring(c.ClrType.Namespace.LastIndexOf('.') + 1)));
        }
    }
    

    Then, in your context, you need to override the OnModelCreating method to add the new convention:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
       modelBuilder.Conventions.Add(new CustomSchemaConvention());
    }