Así es como llamo al procedimiento almacenado con un parámetro con valor de tabla. La principal diferencia es que yo uso un DataTable
parámetro.
Recuerdo haber tenido problemas con los enlaces de nombres de parámetros, pero no recuerdo exactamente cuáles eran. Esto explica el cambio que hice en la sintaxis de la llamada al procedimiento. Sé que este debería estar funcionando.
var dataTable = new DataTable();
dataTable.TableName = "dbo.IntsTTV";
dataTable.Columns.Add("Id", typeof(int));
dataTable.Rows.Add(1); // Id of '1' is valid for the Person table
SqlParameter parameter = new SqlParameter("UserIds", SqlDbType.Structured);
parameter.TypeName = dataTable.TableName;
parameter.Value = dataTable;
var res = _db.Database.SqlQuery<string>("EXEC GetUsers @UserIds", parameter).ToList();