отлично ! теперь вы должны принять ответ

читал много постов и думаю, что понимаю концепции, но мой небольшой массив целых не может перейти от модуля C # / EF к хранимому процессу SQL Server. Надеясь, другие глаза могут определить проблему.

Я использую EF6, 4.5 .Net Framework, SQL Server 2014

В базе данных я создал следующие типы / procs:

CREATE TYPE [dbo].[IntsTTV] AS TABLE(
  [Id] [int] NOT NULL
)

Обратите внимание, что таблица с именем Person существует со столбцами 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 #

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();

Код успешно вызывает proc, и если я жестко закодирую proc, чтобы он просто возвращал выбор из LastName, то код C # получает это. Это говорит мне, чтоявляется работает.

Если я вызываю proc из другого кода T-SQL, передавая подготовленный табличный параметр (IntsTTV) ints, он работает.

В процедуре, если я выбираю количество строк в таблице переданных параметров, я получаю ноль при вызове из кода C #, но я получаю правильное количество при вызове из кода T-SQL.

Что мне не хватает, пожалуйста?

Ответы на вопрос(3)

Ваш ответ на вопрос