我在我的项目中使用 Entity Framework v4.0 来连接数据库。我的情况是将 List 作为输入参数传递给存储过程,并在 SP 中进行一些操作并返回 List 作为 SP 结果。我知道表值参数是一种选择。但经过一番调查,我发现在实体框架中无法使用表值参数。有没有其他方法不使用表值参数通过实体框架来做到这一点?
问问题
6577 次
1 回答
5
即使您使用实体框架,您仍然可以将 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();
}
于 2013-10-23T15:35:40.340 回答