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
In EF 6.2 or EF Core, use the Schema property to specify the schema name for a Db table as shown below:
[Table("TableName", Schema = "Foo")]
public class Entity
{
//Properties
}
Details Here
I will add one thing to what octavioccl provided. If you would like to preserve table name pluralization, you can use built-in pluralization service like this:
using System.Data.Entity.Infrastructure.DependencyResolution;
public class CustomSchemaConvention : Convention
{
public CustomSchemaConvention()
{
var pluralizationService = DbConfiguration.DependencyResolver.GetService<IPluralizationService>();
Types().Configure(c => c.ToTable(
pluralizationService.Pluralize(c.ClrType.Name),
c.ClrType.Namespace.Substring(c.ClrType.Namespace.LastIndexOf('.') + 1))
);
}
}
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");
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());
}