gpt4 book ai didi

entity-framework - 如何将 Entity Framework 代码优先模型映射到单个 SQL Server 架构?

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

我正在创建一个 Entity Framework 代码优先模型来对 SQL Server 数据库执行临时查询。我没有在我的 EF 模型中包含来自“dbo”模式的任何表/ View ;相反,我只在我的数据库中包含来自“模型”模式的表/ View 。我的数据库中确实有重复的对象名称,它们仅由模式分隔(例如“dbo.Child”和“model.Child”)。

是否有一行我可以在 DbContext 中指定,本质上说“将此上下文中的所有实体映射到‘模型’架构”?我知道我可以将每个实体映射到正确的模式(见下文),但我想避免再次列出我的数据库中的每个实体。

这是我知道我能做的:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Child>().ToTable("Child", "model");
modelBuilder.Entity<Referral>().ToTable("Referral", "model");
// 100 lines later...
modelBuilder.Entity<Exit>().ToTable("Exit", "model");
}

这是我想做的:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new MapAllEntitiesToSchemaConvention("model"));
}

最佳答案

无论如何我找不到在 EF 4.2 中开箱即用的方法,但我需要我的所有实体都在不同的架构中,所以我破解了它以试图让事情更干燥。它使用与 EF 相同的底层复数化引擎,并且在实体需要指定表名时进行覆盖。

需要对 System.Data.Entity.Design 的引用。

public class BaseConfiguration<TEntityType> : EntityTypeConfiguration<TEntityType> where TEntityType : class
{
private readonly static PluralizationService ps = PluralizationService.CreateService(new CultureInfo("en-US"));

public BaseConfiguration() : this(ps.Pluralize(typeof(TEntityType).Name)) { }
public BaseConfiguration(string tableName) : this(tableName, MyContext.Schema) { }
public BaseConfiguration(string tableName, string schemaName)
{
ToTable(tableName, schemaName);
}
}

我通过 MyContext 中的常量字符串定义模式名称,即:

public class MyContext : DbContext
{
public const string Schema = "my";

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new SnapshotConfiguration());
}
}

我的实体配置如下:

public class SnapshotConfiguration : BaseConfiguration<Snapshot>
{
...
}

警告:我仍然需要在正确的模式中为我想要的每个实体进行配置 - 但它的要点可以在其他地方采用。

关于entity-framework - 如何将 Entity Framework 代码优先模型映射到单个 SQL Server 架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308240/

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