Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体框架中使用SQL表值参数_C#_Entity Framework_Entity Framework 4 - Fatal编程技术网

C# 在实体框架中使用SQL表值参数

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 =

我在项目中使用EntityFrameworkV4.0连接到数据库。我需要将列表作为输入参数传递给存储过程,并在SP中执行一些操作,然后将列表作为SP结果返回。我知道表值参数是一个选项。但经过一些调查,我发现在实体框架中不可能使用表值参数。是否有其他方法不使用表值参数通过实体框架执行此操作?

即使使用实体框架,也可以将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();
}
//创建元数据记录
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是否执行?有关读取结果的信息,请参见此处: