9

私は午前中ずっとこれをいじっていますが、答えが見つかりません。EF を使用してストアド プロシージャを参照しようとしていますが、何を試してもモデル ブラウザに表示されません。

次の手順を使用して、手順をモーダルに入れようとしました。

  1. エンティティモデルにプロシージャを追加

  2. モデルを右クリックし、[新規追加] --> [関数のインポート] を選択します

  3. それに名前を付けて、私の手順を選択してください

  4. 新しい複雑なコレクションを生成します(エンティティを使用してみましたが、どちらも機能しません)

  5. [OK] をクリックします

これを何度も実行しましたが、モデルの「関数のインポート」フォルダーに関数が表示されますが、モデルに表示されないため、参照できません。

次の手順を実行すると、ストアド プロシージャを (インポートなしで) 直接参照できることがわかりました。

    DBEntities db = new DBEntities();
    var test = db.gsp_GetGroups();

IQueryable<T>ただし、大きな回避策 がないとこれを変換できません。

これを適切に追加するために欠けている手順を知っている人はいますか?

ありがとう

PS VS 2012、asp.net 4.0

4

5 に答える 5

13

EF モデルの生成に使用している SQL ログインに、インポートしようとしているストアド プロシージャを実行する権限があることを確認します。

  1. App.config に移動し、エントリを探しますconnectionStrings(通常は下部にあります)。複数の接続文字列がある場合、必要なものは、コンテキストが使用するものです。
    • edmx ファイルに移動し、ドリルダウンしてエンティティ クラスを見つけます。
    • たとえば、 がある場合MyDbModel.edmx、その下にMyDbModel.Context.ttが含まれますMyDbModel.Context.cs
    • ファイルには、MyDbModel.Context.cs継承元のクラスがDbContextあり、コンストラクターが呼び出しますbase("name=<your connection string name>")
    • <your connection string name>app.config で探しているものです。
  2. 接続文字列にはユーザーが表示されます (統合セキュリティは、ログインしている AD ユーザーを意味します。これは、プログラムを使用するすべてのユーザーが正しい DB アクセス権を持っている場合にのみ機能します。これは、運用環境では危険な仮定になる可能性があります)。
  3. SQL Management Studio に移動し、このストアド プロシージャをユーザーの "セキュリティ保護可能な" に追加します。
于 2014-02-11T00:43:14.647 に答える
8

Sql Server Management Studio の SP に移動し、プロパティを右クリックしてアクセス許可に移動し、パブリックを実行に設定します。

上記はすべて、アクセス許可の問題であるという答えになる可能性があります。上記の答えにより、理由を調べて、これを結論付けました。

于 2015-01-23T21:38:49.867 に答える
2

同様の問題がありました。Entity Framework 5 から 6 にアップグレードすると、問題が解決されました。

私にとっては、ストアド プロシージャの下にカスタム SQL サーバー スキーマが表示されませんでしたが、同じスキーマがテーブル セクションに正しく表示されていました。

これが他の誰かに役立つことを願っています。

于 2014-11-21T05:02:36.940 に答える
1

@Limeyあなたの問題は、おそらくAccessインポート機能のレベルが原因です。これを試して:

フォルダをModel Browser見つけますFunction Inports。関数を右クリックして、 を選択しますProperties。プロパティ ウィンドウで、最初のオプションをmodel.edmxにAccess変更して保存する必要があります。Public

コードに戻って、これが機能するかどうかを確認してください。

于 2013-07-12T17:05:32.770 に答える