1

Entity Framework Code FirstまたはDbContext APIがOracleによって公式にサポートされていないことを、多くのWebサイト、特にOracleフォーラムで読みました。

そうは言っても、私は多くの場所で、人々が Oracle で EF CodeFirst を使用してプロジェクトを正常に展開したことも読んだことがあります。私は多くの問題を経験しており、SQL Server でも動作するようにコードを調整しています。

機能していないように見える関数の 1 つは DbSet.Find で、キーをパラメーターとして渡し、そのレコードを正確に取得します。

Find を使用すると (同じコードベースで SQL Server を使用すると問題なく動作します)、次のエラーで例外がスローされます。

ORA-00942: table or view does not exist

私はそれについてこの質問を読みましたが、ケーシングについて言及していますが、これは私の場合ではないため、修正はありません。

奇妙なことに、 using はDbSet.SingleOrDefault(x => x.Id == SomeId)問題なく機能するため、スキーマ、テーブル名、および列の大文字と小文字が適切であると確信しています。

DbContext を使用しているときに Find を正常に使用した人はいますか?

注意してください: 私は EDMX を使用していないため、使用できません。引き続き CodeFirst を使用する必要があります。

ありがとう。

4

1 に答える 1

0

私のクラスで作成されたデータ注釈に実際に問題があり、そのうちの1つにタイプミスがありましたが、例外は参照されたテーブルまたはビューを公開していないため、それを確認する唯一の方法はそれを確認することでした:

[TableName="MY_TABLE"]
public class MyClass
{

}

テーブル名に対応

CREATE TABLE MY_TABLE {

}

...私の DbContext 実装に DbSet があったすべてのクラスに対して。

さて、なぜDbSet.Find()例外がスローされ、そうでDbSet.SingleOrDefault()はなかったのかは私の知る限りではありませんが、最初にすべての POCO クラスをトラバースし、作業中の DbSet が一方、この同じ DbContext の他のSingleOrDefault()ものは、クエリを実行するときに実際に使用するテーブルとオブジェクトのみのマッピングをチェックしているようです。

そうです、DbSet.SingleOrDefault()スローや例外ではなかっDbSet.Find()たので、問題はマッピングではなくEFにあると思いました。

拡張メソッドが異なれば動作も異なるため、これらのマッピングに注意して注意してください。

于 2013-09-11T22:59:11.127 に答える