C# переопределить Entity Framework Database.ExecuteSqlCommand - PullRequest
1 голос
/ 14 января 2020

Есть ли способ переопределить Database.ExecuteSqlCommand для меня, чтобы я мог принудительно запускать хранимую процедуру (наряду с фактическим значением sql) каждый раз, когда я ее вызываю?

Ответы [ 4 ]

1 голос
/ 14 января 2020

Нет, вы не можете переопределить Database.ExecuteSqlCommand, потому что эти методы не являются виртуальными. Кроме того, обычно не рекомендуется звонить Database.ExecuteSqlCommand напрямую из сервисов / контроллеров. Вместо этого у вас может быть другой уровень абстракции, где у вас может быть метод, который будет вызывать хранимую процедуру перед выполнением команды SQL.

    public int RunSqlCommand(string sql, params object[] parameters)
    {
        _database.ExecuteSqlCommand("YourStoredProcedure @p0", parameters: new[] {"Parameter1"});
        _database.ExecuteSqlCommand (sql, parameters);
    }
1 голос
/ 14 января 2020

Короче, ты не можешь. По крайней мере, не через переопределение. Чтобы вы могли переопределить метод, он должен быть изначально абстрактным или виртуальным .

Вы можете создать метод в своем классе DbContext, чтобы иметь дело с выполнением вашей хранимой процедуры перед выполнением вашего запроса. .

0 голосов
/ 16 января 2020

То, с чем я в конечном итоге оказал наименьшее минимальное влияние на существующий код, было просто использовать перехватчик соединений. Всякий раз, когда открывается соединение, я запускал свою хранимую процедуру раньше всего:

public class myInterceptor : IDbConnectionInterceptor { public void Opened(DbConnection connection, DbConnectionInterceptionContext interceptionContext) { //do my SP here } }

0 голосов
/ 14 января 2020

Несколько идей, которые приходят мне в голову, заключаются в том, чтобы реализовать свой собственный метод (переопределить или расширить базу данных), «принудительно» выполнить хранимую процедуру до, а затем запустить SQL, переданный в качестве параметра. , Некоторым другим вариантом будет использование Dapper и вызов вашей процедуры, а затем ваш SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...