1
public SqlFileStream GetStream(Guid streamedReportId, Guid orgReportId)
{
    string tmpFileName = string.Empty;

    using (var ts = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromHours(1)))
    {
        using (SqlConnection conn = GetConnection())
        using (SqlCommand cmd = conn.CreateCommand())
        {
            conn.Open();

            cmd.CommandText = @"SELECT p.Person.PathName() AS path, 
                                       GET_FILESTREAM_TRANSACTION_CONTEXT() as txnToken   
                                FROM [dbo].[Persons] p 
                                WHERE p.Id = @Id";

            cmd.Parameters.AddWithValue("@Id", personId);

            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                if (reader.Read())
                {
                    var path = reader.GetString(reader.GetOrdinal("path"));

                    byte[] txnToken = reader.GetSqlBinary(reader.GetOrdinal("txnToken")).Value;

                    Stream sqlFileStream = new SqlFileStream((string)path, txnToken, FileAccess.Read);
                    return sqlFileStream;
                }

                reader.Close();
            }
        }

        ts.Complete();
    }

    return null;
}

我正在尝试在数据访问层中创建一个函数,该函数将返回一个SqlFileStream. 该函数应该从业务逻辑层调用。SqlFileStream包裹在几个TransactionScopeusing 语句中。我读到如果早先调用返回,则不会执行TransactionScope该方法。ts.Complete()我怎么解决这个问题。请帮助提供替代解决方案。

4

0 回答 0