为了验证这一点,我伸出你的存储过程,使其返回参数表的第一行:
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,所以我不能说你是否可以这样做。
“表值参数” - raw ado.net当然可以(虽然它的工作效果取决于场景) –