Как записать subsonic3 sql

Я начинаю разрабатывать новое приложение asp.net на основе subsonic3 (для запросов) и log4net (для журналов) и хотел бы знать, как взаимодействовать subsonic3 с log4net, чтобы log4net регистрировал базовый sql, используемый subsonic.

Вот что у меня есть на данный момент:

public static IEnumerable<arma_ocorrencium> ListArmasOcorrencia()
    {
        if (logger.IsInfoEnabled)
        {
            logger.Info("ListarArmasOcorrencia: start");
        }

        var db = new BdvdDB();
        var select = from p in db.arma_ocorrencia
                              select p;

        var results = select.ToList<arma_ocorrencium>(); //Execute the query here

        if (logger.IsInfoEnabled)
        {
            // log sql here
        }


        if (logger.IsInfoEnabled)
        {
            logger.Info("ListarArmasOcorrencia: end");
        }

        return results;
    }

person bastos.sergio    schedule 17.05.2010    source источник


Ответы (2)


Вы можете использовать свойство Log класса Provider:

_db.Provider.Log = Console.Out;

будет записывать ваши операторы SQL в консоль. Если вы хотите использовать log4net или что-то подобное, вам придется написать небольшой класс посредника, который реализует TextWriter и перенаправляет весь полученный ввод в log4net.

person saintedlama    schedule 30.06.2010

Вы можете получить сгенерированный sql следующим образом:

string sql = select.GetQueryText();

Убедитесь, что вы используете версию 3.0.0.4 или выше.

Ваше здоровье

person andrecarlucci    schedule 10.06.2010
comment
Я получаю эту ошибку, и да, я использую 3.0.0.4: System.Linq.IQueryable ‹Bdvd.Data.arma_ocorrencium› »не содержит определения для« GetQueryText »и метода расширения« GetQueryText », принимающего первый аргумент типа 'System.Linq.IQueryable ‹Bdvd.Data.arma_ocorrencium›' можно найти (вам не хватает директивы using или ссылки на сборку?) - person bastos.sergio; 11.06.2010