gpt4 book ai didi

entity-framework - 在 EF 代码首次迁移中使用模式

转载 作者:行者123 更新时间:2023-12-05 04:08:01 25 4
gpt4 key购买 nike

我想这个问题是一个表面问题;当您最初创建 EF 迁移时,默认情况下它会放入架构;例如:

public override void Up()
{
DropPrimaryKey("dbo.MyTable");

AddPrimaryKey("dbo.MyTable", "NewField");

这看起来不错,你会看到它生成的键名(键名中有 dbo)。

我意识到解决这个问题的一种方法是直接指定键名。是否还有其他选项,例如可以为 block 指定模式,但不包含在特定修改中?例如:

public override void Up()
{
UseSchema("dbo");
DropPrimaryKey("MyTable");

AddPrimaryKey("MyTable", "NewField");

我知道您可以简单地省略模式名称;即,这将起作用:

public override void Up()
{
DropPrimaryKey("MyTable");

AddPrimaryKey("MyTable", "NewField");

但是我该如何处理不止一个模式的情况呢?

最佳答案

您可以使用 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

TableAttribute Class

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

Entity Framework Custom Code First Conventions (EF6 onwards)

关于entity-framework - 在 EF 代码首次迁移中使用模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48152435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com