2012-05-06 5 views
3

まず、テーブルを作成するためにエンティティフレームワークのコードを使用しています。私はホストされた環境で作業しているので、DBではなくテーブルを作成してください.DBを作成できるユーザーはいません。 DBの更新をコミット生成されたテーブルからデータを取得するときにオブジェクト名 'dbo.TableName'が無効です

が正常に動作しますが、データを取得すると、例外提供します:

例外の詳細:System.Data.SqlClient.SqlException:無効なオブジェクト名 'dbo.EventHosts' を。

私はEFコードファーストを使用してDBを作成していないため、この問題が発生していると読んでいます。それはいいですが、どのように私はこれをエレガントに解決するのですか?

生成されたすべてのテーブルには、dboのような接頭辞がありません。このようなソリューションが動作しない、と全くエレガントではないん

[Table("EventHosts", Schema = "")] 
+0

こんにちは、ご不便をおかけして申し訳ありません。それは、MS SQLと実行されているクエリです。何かSELECTして何かをdbo.EventhHostsから取得してください。明らかに間違っているのは、テーブル名がEventHostsだけであるためです。 したがって、Entity Frameworkがdboを入れないようにする必要があります。テーブル名の前に、または接頭辞を付けてテーブルを生成する必要があります。 –

+1

プレフィックスは実際にはスキーマであり、dboはデフォルトのものです。どのスキーマがデータベースのデフォルトですか?そのスキーマをマッピングで使用する必要があります。 –

+0

@LadislavMrnka - ありがとう! 私は何をしたのですか: - exec sp_columns EventHostsを実行しました(Visual Studioで) - TABLE_OWNER列の名前を取得しました - 属性[Table( "EventHosts"、Schema = "TABLE_OWNER_HERE")]のエンティティ それは問題を解決します。誰かが、この属性をすべてのエンティティに追加するのではなく、1行ですべてのエンティティに対してどのように設定できるか考えているなら、私に知らせてください。 –

答えて

2

はあなたの最初の質問に答えるために:あなたのホスティングプロバイダがあなたのために作成されたスキーマを使用します。

2番目の質問に答えてください:いいえ現時点での慣習を変更したり新しい慣習を作成することはできないため、現在のところデフォルトのスキーマをグローバルに変更する直接的な方法はありません。あなたはそれをハックしようとすることができます。

たとえば、OnModelCreatingを上書きして、リフレクションを使用して、コンテキスト内ですべてのDbSet<>プロパティを宣言することができます。単にこれらのプロパティで単純なループを使用して、テーブル名とカスタムスキーマとしてプロパティの名前を使用してToTableマッピング呼び出しを作成することができます。この作品を制作するには、リフレクションでいくつかの演奏が必要です。

また、カスタム慣習を実装することで、再利用可能なアプローチを試すこともできます。あなたはEFで独自の慣習を使用することに関する多くの異なる記事を見つけることができます。いくつかの例:

私のハイレベルテストされていないアイデアは、同じ原理を、以下、コンベンションメカニズムによって処理され、すべてのエンティティに適用されるアセンブリレベルの属性を作成しています。

+0

私はMySqlと同様の問題があります。可能であれば、http://stackoverflow.com/questions/28044340/table-dbname-dbo-tablename-doesnt-existentity-framework-6をご覧ください。 –

0

SQL Serverでは、デフォルトのスキーマ名を 'dbo'に設定してください。このエラーの理由のオン

http://msdn.microsoft.com/en-us/library/ms173423.aspx

+0

複数のスキーマ名を持つデータベースはどうですか? – SimonGates

+0

その場合、複数のスキーマ名はありません –

0

「EventHosts」は存在しないか、そのテーブルが他の名前に変更されるという名前のテーブルはそれで確認してくださいます。..

+2

これはコメントであり、実際の答えではありません。より詳細な情報を提供できる場合は、それが役に立ちます。 – CaptainBli

関連する問題