#c# #entity-framework
#c# #entity-framework
Вопрос:
В настоящее время я следую этим инструкциям о том, как выполнить запрос с использованием необработанного sql в ef.
https://learn.microsoft.com/en-us/ef/ef6/querying/raw-sql
Возможно ли выполнить необработанный sql-запрос на чтение в контексте базы данных таким образом, чтобы мы были уверены, что используем только одно соединение с базой данных во время обработки запроса.
Аналогично этому, но с DbContext вместо IDbConnection.
public class SqlConnectionFactory : ISqlConnectionFactory, IDisposable
{
private readonly string _connectionString;
private IDbConnection _connection;
public SqlConnectionFactory(string connectionString)
{
this._connectionString = connectionString;
}
public IDbConnection GetOpenConnection()
{
if (this._connection == null || this._connection.State != ConnectionState.Open)
{
this._connection = new SqlConnection(_connectionString);
this._connection.Open();
}
return this._connection;
}
public void Dispose()
{
if (this._connection != null amp;amp; this._connection.State == ConnectionState.Open)
{
this._connection.Dispose();
}
}
}
Комментарии:
1. Может быть, вы хотите вручную открыть транзакцию перед первым запросом и зафиксировать утилизировать после последнего запроса. В противном случае я, вероятно, не понимаю актуальной проблемы, которую вы пытаетесь здесь решить (однако, поскольку вы говорите о чтениях, фиксация транзакции на самом деле не имеет смысла). На самом деле, не имеет смысла обеспечивать одно открытое соединение, когда мы говорим только о чтении — не так ли?
2. Как вы думаете, почему не имеет смысла запрещать открывать x соединений с БД для x операций чтения?
3. Я думаю, что не имеет смысла применять это поведение в вашем коде. Многие провайдеры выбирают пул соединений по умолчанию на низком уровне, поэтому велика вероятность, что вы на самом деле работаете с одним открытым соединением, когда просто запускаете свои запросы и игнорируете детали. Итак, если у вас действительно проблема с низкой скоростью соединения, возможно, стоит разобраться. Но если вы просто предполагаете , что вам следует вручную обработать ваше соединение, то вы, вероятно, тратите свое и чужое время без необходимости.