2

プロジェクトで Entity Framework v4.0 を使用してデータベースに接続しています。List を入力パラメーターとしてストアド プロシージャに渡し、SP でいくつかの操作を行い、SP の結果として List を取得する状況にあります。テーブル値パラメーターが 1 つのオプションであることはわかっています。しかし、調査の結果、Entity Framework でテーブル値パラメーターを使用できないことがわかりました。テーブル値パラメーターを使用せずにエンティティ フレームワークを介してそれを行う方法はありますか?

4

1 に答える 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 に答える