отлично ! теперь вы должны принять ответ
читал много постов и думаю, что понимаю концепции, но мой небольшой массив целых не может перейти от модуля 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.
Что мне не хватает, пожалуйста?