それをテストするために、ストアド プロシージャを拡張して、パラメーター テーブルの最初の行を返すようにしました。
CREATE PROCEDURE MyProc
@Arg1 CustomArgType readonly
AS
BEGIN
select top 1 SomeInt from @Arg1
END
これで、C# で次のコードを使用して、ストアド プロシージャを実行できます。
using (var conn = new SqlConnection("Data Source=localhost;Initial Catalog=temp;User ID=sa"))
{
conn.Open();
DataTable dt = new DataTable();
dt.Columns.Add("SomeInt", typeof(Int32));
dt.Rows.Add(new Object[] { 3 });
var command = conn.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "MyProc";
command.Parameters.Add(new SqlParameter("@Arg1", dt));
object returnValue = command.ExecuteScalar();
}
returnValue
私が期待した 3 です (パラメーター テーブルの 1 行目に挿入しました)。
残念ながら、私は EF についてあまり知らないので、同じことができるかどうかはわかりません。