我在项目中使用Entity Framework v4.0来连接数据库。我处于将List作为输入参数传递给存储过程并在SP中执行一些操作并将List作为SP结果返回的情况。我知道表值参数是一个选项。但经过一些调查后,我发现无法在Entity Framework中使用Table Valued参数。有没有其他方法没有使用表值参数来通过实体框架来完成它?
答案 0 :(得分:4)
即使使用实体框架,您仍然可以将TVP传递给存储过程。
示例:
// Create metadata records
IEnumerable<SqlDataRecord> sqlDataRecords = new List<SqlDataRecord>();
// Create a list of SqlDataRecord objects from your list of entities here
SqlConnection storeConnection = (SqlConnection)((EntityConnection)ObjectContext.Connection).StoreConnection;
try
{
using (SqlCommand command = storeConnection.CreateCommand())
{
command.Connection = storeConnection;
storeConnection.Open();
SqlParameter[] sqlParameters = parameters.ToArray();
command.CommandText = YourStoredProcedureName;
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("YourTVPName", SqlDbType.Structured)
{
Value = sqlDataRecords,
TypeName = "dbo.Your_Table_Type"
});
using (DbDataReader reader = command.ExecuteReader())
{
// Read results
}
}
}
finally
{
storeConnection.Close();
}