2012-01-13 14 views
3

私たちは、各クライアントが独自のデータベースインスタンスを持っている環境を持っています(すべての目的と目的のために同一のスキーマを使用しています)。私たちは、クライアントが特定のデータベースのデータに対してCRUD操作を実行するためにログインできるダッシュボードアプリケーションを持っています。データベースと対話するために、コードファーストEFモデルを使用します。 DbContextをインスタンス化するときに、クライアントのデータベースの接続文字列を渡すだけです。コードファーストEFモデルのProviderManifestTokenをプログラムで設定することはできますか?

ただし、データベースインスタンスはSQL Server 2005と2008の混在しています。特定のページで私たちが見ている問題の根本)

、我々は次のようなエラーが発生見るために始めました:。

使用中のSQL Serverのバージョンは、データ型「DATETIME2」をサポートしていません。 。

グーグルとStackOverflowingから、私はそれはDbContextに、おそらく誤って設定ProviderManifestTokenによるものだという結論に来ています。

ただし、エラーは散発的です。プロダクションエラーログに基づいて、エラーが発生した同じクライアントを表示し、エラーを表示せずに同じCRUD操作を実行できます。

私は迷っています。

ProviderManifestTokenをプログラムで設定することはできますか?または、デフォルトの接続ファクトリが正しく設定されていない可能性があります(それをサポートするために何かできることがあります)。または私は基本から離れている?何か案は?ところで

...

NULL可能であり、どちらも2つのdatetime列を、持っている(と最新のエラーはその値として2012年1月13日nullとした上でエラーが発生しているエンティティこれらのフィールドのために、私は値がdatetimeの範囲内にあることを確実にすることについてthis answerが適用されないことを確信している。

+0

コンテキストに接続文字列を正確にどのように渡しますか? –

+0

@LadislavMrnka DbContextには、接続文字列を受け入れるコンストラクタオーバーロードがあります。したがって、接続するデータベースがEFモデルと一致する限り、あなたはうまく行きます。基本的なアイデアはここにあります:https://gist.github.com/1614591無罪を守るために私たちの実装が省略されています:) – Lobstrosity

答えて

0

まあ、まだありません解決策は。しかし、我々は今のところ回避策を考え出した。

アプリケーションプールを再起動した後、すぐに2008のバックアップクライアントのクライアントダッシュボードにアクセスすると、EFはSQL Server 2008の制約に基づいてマッピングを生成してキャッシュし、2008年のすべてのダッシュボードは正常に機能しますが、2005年のダッシュボードは失敗しますdatetime2エラーで書き込みます。

ただし、アプリケーションプールを再起動してすぐに2005年のクライアントのダッシュボードにアクセスすると、EFはSQL Server 2005の制約に基づいてマッピングを生成してキャッシュします(2005年と2008年の両方のデータベースインスタンス)。

基本的に、私たちの公開プロセスでは、すぐに2005年にサポートされているダッシュボードにすぐにアクセスできるようになりました。

0

ありがとうございます。私はSQL2005 DBよりSQL2008 DBを訪れたコンソールアプリケーションで同じ問題を抱えていましたが、同じ問題がありました。私はそれをSQL2005よりも先にSQL2005に移行し、問題は解決しました。私も最初にEFコードを使用しています。

関連する問題