在 EF 代码首次迁移中使用模式
Working with Schemas in EF Code First Migrations
我想这个问题是一个表面问题;当您最初创建 EF 迁移时,默认情况下它会放入架构;例如:
public override void Up()
{
DropPrimaryKey("dbo.MyTable");
AddPrimaryKey("dbo.MyTable", "NewField");
这看起来不错,你会看到它生成的键名(键名中有 dbo)。
我意识到解决这个问题的一种方法是直接指定键名。是否还有其他选项,例如可以为块指定模式,但不包含在特定修改中?例如:
public override void Up()
{
UseSchema("dbo");
DropPrimaryKey("MyTable");
AddPrimaryKey("MyTable", "NewField");
我知道您可以简单地省略架构名称;即,这将起作用:
public override void Up()
{
DropPrimaryKey("MyTable");
AddPrimaryKey("MyTable", "NewField");
但是我将如何处理不止一个模式的情况?
您可以在 DbModelBuilder
class 实例上使用 HasDefaultSchema
方法指定默认架构。
modelBuilder.HasDefaultSchema("schemaName");
您还可以在 EntityTypeConfiguration<TEntityType>
class 实例上使用 ToTable
方法为每个实体设置架构。这将为所需 entity/ies.
生成具有提供架构的迁移脚本
modelBuilder.Entity<TEntity>().ToTable("tableName", "schemaName")
您还可以使用 Table 属性来设置实体的架构。
[Table("tableName","schemaName")]
或者您可以编写自己的自定义约定
public class DynamicSchemaConvention : Convention
{
public CustomSchemaConvention()
{
Types().Configure(c => c.ToTable(c.ClrType.Name, c.ClrType.Namespace.Substring(c.ClrType.Namespace.LastIndexOf('.') + 1)));
}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new CustomSchemaConvention());
}
相关链接:
DbModelBuilder.HasDefaultSchema Method
EntityTypeConfiguration.ToTable Method
Entity Framework Custom Code First Conventions (EF6 onwards)
我想这个问题是一个表面问题;当您最初创建 EF 迁移时,默认情况下它会放入架构;例如:
public override void Up()
{
DropPrimaryKey("dbo.MyTable");
AddPrimaryKey("dbo.MyTable", "NewField");
这看起来不错,你会看到它生成的键名(键名中有 dbo)。
我意识到解决这个问题的一种方法是直接指定键名。是否还有其他选项,例如可以为块指定模式,但不包含在特定修改中?例如:
public override void Up()
{
UseSchema("dbo");
DropPrimaryKey("MyTable");
AddPrimaryKey("MyTable", "NewField");
我知道您可以简单地省略架构名称;即,这将起作用:
public override void Up()
{
DropPrimaryKey("MyTable");
AddPrimaryKey("MyTable", "NewField");
但是我将如何处理不止一个模式的情况?
您可以在 DbModelBuilder
class 实例上使用 HasDefaultSchema
方法指定默认架构。
modelBuilder.HasDefaultSchema("schemaName");
您还可以在 EntityTypeConfiguration<TEntityType>
class 实例上使用 ToTable
方法为每个实体设置架构。这将为所需 entity/ies.
modelBuilder.Entity<TEntity>().ToTable("tableName", "schemaName")
您还可以使用 Table 属性来设置实体的架构。
[Table("tableName","schemaName")]
或者您可以编写自己的自定义约定
public class DynamicSchemaConvention : Convention
{
public CustomSchemaConvention()
{
Types().Configure(c => c.ToTable(c.ClrType.Name, c.ClrType.Namespace.Substring(c.ClrType.Namespace.LastIndexOf('.') + 1)));
}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new CustomSchemaConvention());
}
相关链接:
DbModelBuilder.HasDefaultSchema Method
EntityTypeConfiguration.ToTable Method
Entity Framework Custom Code First Conventions (EF6 onwards)