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

后端 未结 3 1071
死守一世寂寞
死守一世寂寞 2021-02-13 19:00

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

相关标签:
3条回答
  • 2021-02-13 19:19

    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

    0 讨论(0)
  • 2021-02-13 19:22

    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))
            );
        }
    }
    
    0 讨论(0)
  • 2021-02-13 19:24

    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());
    }
    
    0 讨论(0)
提交回复
热议问题