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
заключено в TransactionScope
и несколько операторов using. Я читал о TransactionScope
, что ts.Complete()
метод не будет выполнен, если возврат вызывается раньше. Как я могу решить эту проблему. Пожалуйста, помогите с альтернативными решениями.