Linq2DB 参数化模式

Linq2DB Parameterized Schema

好的,这绝对是我关于 Linq2DB 的最后一个问题!也许...

我已经通过 Linq2DB 的一些学习曲线完成了一个针对 DB2/iSeries 数据的项目。一个问题是,虽然我的代码可以很好地处理我的测试数据库,但在生产中它需要指向相同对象的不同模式。例如,一个环境中的特定用户 class 会有一个 table 映射,例如:

[Table(Schema="ABC", Name="USERS")]

在另一个环境中它可能看起来像:

[Table(Schema="XYZ", Name="USERS")]

我还没有完全弄清楚我将如何在生产中处理这个问题。有没有人处理过这个?有没有办法用 DataContext 做到这一点?或者可能通过深入研究映射的内部结构?任何想法或想法都会受到赞赏!

我建议您使用流畅的映射或配置。

对于流畅的映射,将架构名称传递给流畅的映射构建器函数:

void ConfigureMappings(MappingSchema ms, string schema)
{
    ms.GetFluentMappingBuilder()
        .Entity<Users>()
            .HasSchemaName(schema)
    // configure columns and other entities
}

基于配置的解决方案:对测试和生产环境使用不同的配置并将配置名称传递给数据连接构造函数:

[Table(Schema="ABC", Name="USERS", Configuration="test")]
[Table(Schema="XYZ", Name="USERS", Configuration="production")]
public class User
{...}

// or make test configuration default and override it for production where it differ from default
[Table(Schema="ABC", Name="USERS")]
[Table(Schema="XYZ", Name="USERS", Configuration="production")]
public class User
{...}

这种方法(带有配置)也可以用于流畅的映射器。