4

最初にエンティティフレームワークコードを使用してテーブルを作成しています。注意してください-私はホストされた環境で作業していて、データベースの作成を許可されているユーザーがいないため、DBではなくテーブルを作成します。

DB更新のコミットは正常に機能しますが、データを取得すると例外が発生します。

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

DBを作成するためにEFCodeFirstを使用していないために発生することを読みました。それは問題ありませんが、どうすればこれをエレガントに解決できますか?

生成されたすべてのテーブルには、dboのようなプレフィックスがありません。このような解決策は機能せず、まったくエレガントではありません。

[Table("EventHosts", Schema = "")]
4

5 に答える 5

5

わかりました。私にとっての問題は、テーブルが呼び出されdbo.UserState、C#ではdbo.UserStates複数形のためにEFがアクセスしようとしていたことでした。

解決策は、Table属性をクラスの上に置き、正確なテーブル名を指定することでした。

[Table("UserState")]
public class UserState
{
    [Key]
    public int UserId { get; set; }
}
于 2018-05-31T09:40:17.520 に答える
2

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

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

たとえば、OnModelCreatingリフレクションをオーバーライドして使用DbSet<>し、コンテキストで宣言されたすべてのプロパティを取得できます。これらのプロパティで単純なループを使用してToTable、プロパティの名前をテーブル名として使用し、カスタムスキーマを使用してマッピング呼び出しを作成することができます。これを機能させるには、リフレクションで遊ぶ必要があります。

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

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

于 2012-05-07T09:47:07.287 に答える
0

SQLSERVERでデフォルトのスキーマ名を「dbo」に設定してみてください。

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

于 2012-05-07T10:04:37.183 に答える
0

このエラーの理由の1つは、「EventHosts」という名前のテーブルが存在しないか、そのテーブルの名前が別の名前に変更されていることです。確認してください。

于 2014-11-07T13:40:41.217 に答える
0

https://stackoverflow.com/a/12808316/3069271

私は同じ問題を抱えていました、それはマッピングとデータベースの間の複数の問題でした。

于 2016-10-06T18:54:09.633 に答える