Linq2DB参数化架构

时间:2018-12-29 04:58:40

标签: linq2db

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

对于使用DB2 / iSeries数据的项目,我已经使用Linq2DB进行了一些学习。但是,一个问题是,尽管我的代码可以很好地针对我的测试数据库运行,但在生产中,它将需要针对同一对象指向不同的架构。例如,在一个环境中的特定用户类将具有如下表映射:

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

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

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

我还没有弄清楚如何在生产中实现这一目标。有人处理过吗?有没有办法用DataContext做到这一点?还是可能通过深入研究映射的内部?任何想法都可以得到赞赏!

1 个答案:

答案 0 :(得分:2)

我建议为您的案例使用流利的映射或配置。

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

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
{...}

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