1

データベース(Oracle)にデータを保存するアプリケーションがあります シンプルなモデルがあります

public class FileTemplate
{
    public string Xml { get; set; }
    ...
}

とクラスマップ

public class FileTemplateMap : ClassMap<FileTemplate>
{
    public FileTemplateMap()
    {
        Table("FILE_TEMPLATE");
        Map(f => f.Xml, "XML").CustomSqlType("NCLOB");
        ...
    }
}

PostgreSql サポートを追加したい。しかし、PostgreSql には NCLOB データ型がありません。マッピングを変更します。

    public class FileTemplateMap : ClassMap<FileTemplate>
    {
        public FileTemplateMap()
        {
            Table("FILE_TEMPLATE");
#if POSTGRE
            Map(f => f.Xml, "XML").CustomSqlType("TEXT");
#else
            Map(f => f.Xml, "XML").CustomSqlType("NCLOB");
#endif
        }
    }

ここで、(postgresql 用の) 条件付きコンパイル シンボルを定義して、oracle と postgresql 用に異なるビルドを行う必要があります。また、POSTGRE コンパイル シンボルでビルドされたアプリケーションは oracle では動作しません。

条件付きコンパイル シンボルを使用せずにこれを行う他の方法はありますか? 両方のデータベースで動作する 1 つのビルドが必要です。

4

2 に答える 2

1

私はこのようなことをします

public static class CustomSqlTypeHelpers
{
    static readonly string _ClobSqlType;

    static CustomSqlTypeHelpers()
    {
        // Checks to validate config file setting ommitted
        _ClobSqlType = ConfigurationManager.AppSettings["ClobSqlType"];
    }

    public static PropertyPart LargeTextColumn(this PropertyPart pp)
    {
        return pp.CustomSqlType(_ClobSqlType);
    }
}

public FileTemplateMap()
{
    Table("FILE_TEMPLATE");
    Map(f => f.Xml, "XML").LargeTextColumn()
}
于 2013-08-09T12:57:00.750 に答える