0

私はEF7を介してデータベースにマップされたモデルを持っています。すべてのプロパティは、テーブルのマッピングされた列と同じです。Entity Framework 7ストアドプロシージャの結果モデル

私はいくつかの結合された列を返しますが、基底は引き続きマップされたモデルです。

私のデータベース(Table1)にマップされているモデル(エンティティ)は次のとおりです。

public partial class Table1 { public int id { get; set; } public bool Column1{ get; set; } public int Column2 { get; set; } public int Column3 { get; set; } public int Column4 { get; set; } public int Column5 { get; set; } }

私のStoredProcedureは、このオブジェクトに関する追加情報が含まれている別のテーブルから、これらのすべての列、さらに列を返します。

だから私のStoredProcedureは、次のようになります。私のアイデアは、ちょうどこれはのStoredProcedureを実行するために働いているモデル

public string JoinedColumn1 {get; set;} 

にプロパティを追加することでしたが、それは、すぐに働いていない

CREATE PROCEDURE Table1_Select 
    AS 
     BEGIN 
      SELECT Column1, 
        Column2, 
        Column3, 
        Column4, 
        Column5, 
        Table2.JoinedColumn1 
      FROM Table1 
      JOIN Table2 on Table1.ID = Table2.ID_Table1 
     END 

私は1つのエンティティを取得したいから

MyContext.Table1.FirstOrDefault(t=>t.id == 1) 

これは常にサーバーを返しますFiddlerのエラー500では、 "Table1.FromSql(" Table1Select ")"でのストアドプロシージャの実行が正常に機能します。

または、モデルに直接StoredProceduresを使用するかエンティティに直接アクセスするかを決定する必要がありますか?

これに関するベストプラクティスまたは解決策はありますか?

事前に感謝します。 Nicn

+0

はなぜストア手順は、Entity Frameworkのデータベースファースト・アプローチを使用してプロジェクトに含まれていないのですか? –

+0

ScaffoldコマンドでStoredProceduresを追加するには?私は[このリンク](https://github.com/aspnet/EntityFramework/wiki/Design-Meeting-Notes-(10月1日、-2015)#テーブル選択のリバースエンジニアリング)テーブルのためのtまたはスキーマの-s ... – nicn

答えて

0

は、

var results = db.Database.SqlQuery<YourModel>("exec YourSPName [Optional Parameters]").ToList(); 
+0

'context.Table1.ToList()'がもう働かなくても、 'return context.Table1.FromSql'はプロパティとして結合されたColumnを追加するとうまくいきます。 – nicn

+0

コードを入力してください。 –

+0

モデル: 'public partial class Table1 { public int id {get;セット; } パブリックbool Column1 {get;セット; } パブリックint Column2 {get;セット; } public int Column3 {get;セット; } public int Column4 {get;セット; } public int Column5 {get;セット; } 公開ストリングJoinedColumn1 {get;セット; } } ' 作業コマンド: ' StringBuilder sql = new StringBuilder(); sql.Append( "EXEC Table1_Select"); リターンTable1.FromSql(sql.ToString())ToListメソッド(); ' コマンドを動作していない:。 '(context.Table1.ToListを返す); ' か、ファイルが必要なのですか? – nicn

0

をこの方法を試してみてください私は、ソリューションの使用ADO.NET接続のサンプルとしてソースから読み取ります。

パラメータサンプル

try 
{ 
      SqlDataAdapter adapt = new SqlDataAdapter("Table1_Select", ConnectionString); 
      adapt.SelectCommand.Parameters.AddWithValue("@yourparameters", param); 

      adapt.SelectCommand.CommandType = CommandType.StoredProcedure; 
      DataTable dt = new DataTable(); 
      adapt.Fill(dt); 
      adapt.Dispose(); 
      adapt = null; 

      return dt; 
} 
catch(Exception ex) 
{ 
throw ex 
} 

ないパラメータのサンプルを実行してください。

try 
{ 
    SqlDataAdapter adapt = new SqlDataAdapter("Table1_Select", ConnectionString); 
    adapt.SelectCommand.CommandType = CommandType.StoredProcedure; 
    DataTable dt = new DataTable(); 
    adapt.Fill(dt); 
    adapt.Dispose(); 
    adapt = null; 

    return dt; 
} 
catch (Exception ex) 
{ 
    throw ex; 
} 

テーブルの列でデータテーブルを設定し、dataTable値を読み取り、クラスのデータテーブル値を設定します。私はそれが役に立てば幸い

DataTable dt = YourGetDataTableFunction(val); 
    DataRow dr = dt.Rows[0]; //index is zero 
string Column1 = dr["column1"].ToString(); 
string Column2 =dr["column2"].ToString(); 

は、DataTableのサンプルをお読みください。

その他の質問:How to run stored procedures in Entity Framework Core?

0

問題は、私がのStoredProcedureからデータを得ることができないということではありません。 問題は、storedProcedureのために、モデルにdatabase-tableの列より多くのプロパティがあることです。 しかし、私はまだモデルエンティティに直接アクセスしたい場合は、ストアドプロシージャを使用せずに、デバッガがテーブルにはないがストアドプロシージャの列に「無効な列」と表示されるため動作しません。

希望をより明確にしてください。

もう一度お返事ありがとうございます。

Nicn

0

最近のポストから、あなたは同じモデルを使用して、エラーを取得していることを言ったので、あなたのpertcularが エンティティは、

を言うことができます宣言する前に、私は[NOTMAPPED]その利用を提案したいと思いますpublic int Column5 { get; set; } だけ、あなたのSPを呼び出している間に使用され、そのように記述され、

[NotMapped] 
public int Column5 { get; set; } 
+0

これはエンティティで機能しますが、 '.FromSql(" exec SP_Name ")'はこの列を返さないようになりました。この列の値を取得するには、storedProceduresにAkinの方法を使用する必要がありますか? – nicn

+0

これを試してみましたか?それはあなたのために働くかもしれません。 var results = db.Database.SqlQuery ( "Exec YourSPName [任意のパラメータ]")。ToList(); –

+0

7.0.0-rc1の最後のFromSqlがSqlQueryを置き換えており、DbSetと照合する必要があるようです。私たちはどのようにしてどのようなケースになるのか、どのプロジェクトがどのプロジェクトに現れるのかをチーム内で見ていきます。これにあなたの努力に感謝します。 – nicn

関連する問題