我想这个问题是化妆品问题;当您最初创建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");
但是,我如何处理存在多个架构的情况呢?
答案 0 :(得分:1)
您可以使用HasDefaultSchema
类实例上的DbModelBuilder
方法指定默认架构。
modelBuilder.HasDefaultSchema("schemaName");
您还可以使用ToTable
类实例上的EntityTypeConfiguration<TEntityType>
方法为每个实体设置架构。这将生成具有所需实体的提供架构的迁移脚本。
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 6 - Code First: table schema from classes' namespace
Entity Framework Custom Code First Conventions (EF6 onwards)