2017-09-06 39 views
1

Official Oracle SQLとEntity Frameworkドライバを使用してデータベースを読み取ります。しかし、データベースを読むときには、テーブル名に "dbo"という接頭辞が付いています。:Entity FrameworkでOracleスキーマ名を避ける

SELECT 
* 
FROM "dbo"."Woningen" 

"dbo"なし。接頭辞コードは正常に動作し、エラーが発生する "テーブルまたはビューが存在しません"。これはおそらく、ユーザーが 'dbo'ではないため、そのスキーマにアクセスできないためです。私は、Oracle nugetパッケージを更新しようとしましたが、その後、それはエラーを思い付く

[Table("Woningen")] 
public class Woningen 

「接続文字列が整形式ではありません」:これは私が使用しているEntity Frameworkのコードです。だから、おそらくこれまでと同じエラーを抱えています。ただちに失敗しました。これは私が使用したconnectionString形式です:

<add name="DefaultConnection" 
    providerName="Oracle.ManagedDataAccess.Client" 
    connectionString="USER ID=testUser;PASSWORD=password; 
    Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=serverUrl)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=Database)));"/> 

私は、この問題に対する3点の解決を参照して、それらを実装する方法が分からないことができます。

  1. クエリからスキーマ名を除外するためにEntity Frameworkのを操作
  2. は...
  3. アップデートにスキーマにドライバを私のユーザーのアクセスを与え、誰でもフォーマットがどのように変化するかを知っている場合は、フォーマットのConnectionStringを修正

現在のコードは既に本番環境で動作しているので、現在のバージョンは問題ありません。データベースとそのユーザーは新しいので、問題は作成方法によって異なる可能性があります。

+0

EFで使用する適切なスキーマを指定できます。 EF6 + 'modelBuilder.HasDefaultSchema("あなたのスキーマ名 ");' –

+0

@ DanielShillcockありがとう、それは、ユーザー名をスキーマ名として使用するソリューションです。あなたがそれを答えにするなら、私はそれを受け入れるでしょう。 – MrFox

答えて

1

Entity Frameworkが使用するスキーマを指定できます。あなたはEntity Frameworkのを使用している場合

下記参照6+あなたが特定のテーブルの上にスキーマを設定したい場合は、以下の

public class Context : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //Set a default schema for ALL tables 
     modelBuilder.HasDefaultSchema("YourSchemaName"); 
    } 
} 

を使用することができます...あなたがいる場合

[Table("Woningen"), Schema = "YourSchemaName")] 
public class Woningen { } 

EF5を使用する

+0

データベースの最初のアプローチの推奨事項はありますか?ほとんどの場合、dev envのスキーマはprod envとは異なります。 –

+0

@SyedAliTaqiおそらくwebconfig /アプリケーション設定にスキーマ名を格納していますか? –

+0

迅速な返信をありがとう!私はそれを試しましたが、すべての部品をうまく接続できませんでした。ガイドとして、ブログやコードとリンクを共有できるのであれば、本当に役に立ちますか? –

関連する問題