0

最初に EF6 コードを使用して既存の Oracle データベースをマップし、階層ごとのテーブルを作成しようとすると、現在いくつかの問題が発生しています。マップしたいテーブルのスクリプトは次のようになります。

CREATE TABLE TST.DATABASECON
(
    DATABASEID   NUMBER                         NOT NULL,
    CN_DATASOURCE  VARCHAR2(60 BYTE)              NOT NULL,
    CN_CATALOG     VARCHAR2(60 BYTE),
    CN_USERNAME    VARCHAR2(60 BYTE),
    CN_PASSWORD    VARCHAR2(60 BYTE),
    CN_INTEGRATED  NUMBER                         DEFAULT 0,
    CN_PROVIDER    NUMBER                         DEFAULT 0,
);

これは、データベース接続情報を含む Oracle サーバー上のテーブルであり、すべての Oracle データベース情報には CN_PROVIDER = 0 が含まれていますが、SQL データベース情報には CN_PROVIDER = 1 が含まれています。

したがって、この階層を次のようにマッピングするのは自然なことでした

modelBuilder.Entity<ReportConnection>()
                .Map<SqlConnection>(m =>   m.Requires("CN_PROVIDER").HasValue((int)1))
                .Map<OracleConnection>(m => m.Requires("CN_PROVIDER").HasValue((int)0));

ただし、データにアクセスしようとすると、常に次のエラーが発生します。

(60,12) : error 2016: Condition can not be specified 
on values of member 'CN_PROVIDER'. Value conditions 
are not supported for type 'OracleEFProvider.number'.

私はすでにこれを使用してマップしようとしました:

Requires("CN_PROVIDER").HasValue((Int16)1)
Requires("CN_PROVIDER").HasValue((Int32)1)
Requires("CN_PROVIDER").HasValue((Int64)1)
Requires("CN_PROVIDER").HasValue((decimal)1)
Requires("CN_PROVIDER").HasValue((Decimal)1)

そして、私は機知に富んでいます-次の場合に誰かが知っていますか? 2-何か足りない?

今は先に進みます (そして、リポジトリ レイヤーでファクトリを使用して階層を実装します) が、提案されたソリューションを試してみるつもりです - 事前に感謝します!

4

3 に答える 3

3

数値列を Discriminator として使用しているときにも、同じ問題に直面しました。私が使用したソリューションは、あなたにも役立つはずです。それに従って、次のコードを使用します。

modelBuilder.Entity<ReportConnection>()
            .Map<SqlConnection>(m =>   m.Requires("CN_PROVIDER").HasValue(1).HasColumnType("int"))
            .Map<OracleConnection>(m => m.Requires("CN_PROVIDER").HasValue(0).HasColumnType("int"));

お気づきのように、列の型を指定するだけです。これは私にとってはうまくいきました。

于 2016-06-25T14:49:31.263 に答える