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
.
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());
}