私は多くの投稿を読んだことがあると思いますが、私の概念はわかっていると思いますが、小さな配列のintはC#/ EFモジュールからSQLストアドプロシージャ。他の目を望むことは、問題を見つけることができます。私はEF6を使用していint配列をエンティティフレームワーク経由でT-SQLストアドプロシージャに渡す
、4.5の.NET Framework、私はこれらのタイプ/ procsの作成したデータベースでのSQL Server 2014
: '人' という名前のテーブルが存在することを
CREATE TYPE [dbo].[IntsTTV] AS TABLE(
[Id] [int] NOT NULL
)
注意を列 'Id'(int)と 'LastName'(nvarchar)を持ち、データを持っています。
CREATE PROCEDURE [dbo].[GetUsers]
@UserIds dbo.IntsTTV READONLY
AS
BEGIN
SELECT p.LastName
FROM [dbo].[Person] p
INNER JOIN @UserIds ids On p.Id = ids.Id;
END
// Cのコードが正常にPROCを呼び出しんし、私はハードコードprocは単に姓のの選択を返すためにならば、C#のコードがあること受けない
SqlMetaData[] columns = new SqlMetaData[1];
columns[0] = new SqlMetaData("Id", SqlDbType.Int);
SqlDataRecord row = new SqlDataRecord(columns);
row.SetInt32(0, 1); // Id of '1' is valid for the Person table
SqlDataRecord[] table = new SqlDataRecord[1];
table[0] = row;
SqlParameter parameter = new SqlParameter();
parameter.SqlDbType = SqlDbType.Structured;
parameter.ParameterName = "@UserIds";
parameter.TypeName = "dbo.IntsTTV";
parameter.Direction = ParameterDirection.Input;
parameter.Value = table;
SqlParameter[] parameters = new SqlParameter[1];
parameters[0] = parameter;
var res = _db.Database.SqlQuery<string>("GetUsers", parameters).ToList();
#コード。これはがであることを私に伝えます。
私は、他のT-SQLコードからprocを呼び出して、準備されたint型のテーブル値のパラメータ(IntsTTV)を渡すと動作します。
渡されたパラメータテーブルの行数を選択すると、C#コードから呼び出したときにゼロになりますが、T-SQLコードから呼び出した場合は正しいカウントを取得します。
私は何が欠けていますか?
nice!あなたは今答えを受け入れるべきです – jbl