Кто-нибудь знает, можно ли установить схему таблиц первых классов кода на основе пространства имен классов?
Например, каждый класс в пространстве имен Core.Foo
будет иметь схему Foo
.
Кто-нибудь знает, можно ли установить схему таблиц первых классов кода на основе пространства имен классов?
Например, каждый класс в пространстве имен Core.Foo
будет иметь схему Foo
.
Ну, вы можете указать имя схемы, используя одну из этих двух опций:
Использование Аннотации данных:
[Table("TableName","Foo")]
public class Entity
{
}
Использование Fluent Api:
modelBuilder.Entity<Entity>().ToTable("TableName", "Foo");
Копаясь больше в этом вопросе, я думаю, что вы ищете Пользовательскую конвенцию EF:
public class CustomSchemaConvention : Convention
{
public CustomSchemaConvention()
{
Types().Configure(c => c.ToTable(c.ClrType.Name, c.ClrType.Namespace.Substring(c.ClrType.Namespace.LastIndexOf('.') + 1)));
}
}
Затем в вашем контексте вам необходимо переопределить метод OnModelCreating
, чтобы добавить новое соглашение:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new CustomSchemaConvention());
}
Я добавлю одну вещь к тому, что предоставил octavioccl. Если вы хотите сохранить плюрализацию имени таблицы, вы можете использовать встроенное сервис pluralization следующим образом:
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))
);
}
}
В EF 6.2 или EF Core используйте свойство Schema, чтобы указать имя схемы для таблицы Db, как показано ниже:
[Table("TableName", Schema = "Foo")]
public class Entity
{
//Properties
}