C# 在实体框架中使用SQL表值参数
我在项目中使用EntityFrameworkV4.0连接到数据库。我需要将列表作为输入参数传递给存储过程,并在SP中执行一些操作,然后将列表作为SP结果返回。我知道表值参数是一个选项。但经过一些调查,我发现在实体框架中不可能使用表值参数。是否有其他方法不使用表值参数通过实体框架执行此操作?即使使用实体框架,也可以将TVP传递给存储过程 例如:C# 在实体框架中使用SQL表值参数,c#,entity-framework,entity-framework-4,C#,Entity Framework,Entity Framework 4,我在项目中使用EntityFrameworkV4.0连接到数据库。我需要将列表作为输入参数传递给存储过程,并在SP中执行一些操作,然后将列表作为SP结果返回。我知道表值参数是一个选项。但经过一些调查,我发现在实体框架中不可能使用表值参数。是否有其他方法不使用表值参数通过实体框架执行此操作?即使使用实体框架,也可以将TVP传递给存储过程 例如: // Create metadata records IEnumerable<SqlDataRecord> sqlDataRecords =
// 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();
}
//创建元数据记录
IEnumerable sqlDataRecords=新列表();
//从此处的实体列表创建SqlDataRecord对象列表
SqlConnection storeConnection=(SqlConnection)((EntityConnection)ObjectContext.Connection).storeConnection;
尝试
{
使用(SqlCommand=storeConnection.CreateCommand())
{
command.Connection=storeConnection;
storeConnection.Open();
SqlParameter[]sqlParameters=parameters.ToArray();
command.CommandText=YourStoredProcedureName;
command.CommandType=CommandType.storedProcess;
添加(新的SqlParameter(“YourTVPName”,SqlDbType.Structured)
{
Value=sqlDataRecords,
TypeName=“dbo.Your\u Table\u Type”
});
使用(DbDataReader=command.ExecuteReader())
{
//读取结果
}
}
}
最后
{
storeConnection.Close();
}
您是否有机会升级到EF5?谢谢!!!!这有助于。。。。但是如何从存储过程中获取列表??ExecuteReader是否执行?有关读取结果的信息,请参见此处: