Как выполнить пользовательскую инструкцию sql в LLBLGen 3.1 (самообслуживание)?

#llblgenpro #llblgen

#llblgenpro #llblgen

Вопрос:

Используя LLBLGen 3.1 (самообслуживание) на SQL Server, как можно выполнить пользовательский SQL, например:

  • удалить из UserPreference
  • выберите * из UserPreference (например, в datatable)

Ответ №1:

Просто заметил, что на этот вопрос не было ответа. При самообслуживании вы, вероятно, будете использовать класс TypedListDAO .

См.: Сгенерированный код — выборка данных и прогнозов, самообслуживание

В классе TypedListDAO есть все, что вам нужно для выполнения SQL в вашей базе данных, и он может автоматически выполнять проекции на пользовательские классы для вас, если вам это нужно (см. Статью).

Но в основном (из памяти, поэтому могут потребоваться небольшие корректировки), вот как может выглядеть ваш код:

         // inside the DaoClasses namespace of your generated project
        TypedListDAO dao = new TypedListDAO(); 

        // do it yourself, and use your project's connection string
        string connectionString = CommonDaoBase.ActualConnectionString;
        using (var conn = new SqlConnection(connectionString)) { }

        // use a DbConnection directly
        DbConnection connection = dao.CreateConnection();
        // or
        connection = dao.DetermineConnectionToUse(null);
        DbCommand cmd = connection.CreateCommand();
        cmd.CommandText = "SELECT * FROM UserPreferences";
        cmd.CommandType = CommandType.Text;
        var reader = cmd.ExecuteReader(CommandBehavior.Default);
        while (reader.Read()){}
        reader.Close();

        // use a datareader 
        IRetrievalQuery query = new RetrievalQuery(
             new SqlCommand("SELECT * FROM UserPreferences")); 
             // or new RetrievalQuery(cmd); 
             // where you create the cmd using the dao connection

        IDataReader reader = dao.GetAsDataReader(null, query,    
             CommandBehavior.CloseConnection);
        while (reader.Read()){}
        reader.Close();

        // use a datatable - try something like this 
        // (BUT honestly, you might want to look at the custom projection 
        // into custom classes capability, or the data reader, instead of this)
        DataTable dt = new DataTable();
        dao.GetMultiAsDataTable(new EntityFields(0) /* can't be null, i don't think */, 
              dt, query, null);

        // other methods
        dao.ExecuteScalarQuery(query, null);
        ActionQuery actionQuery = new ActionQuery(new SqlCommand("INSERT ..."));
        dao.ExecuteActionQuery(actionQuery, null);
  

ИЛИ используйте микро-orm для выполнения вашего sql и просто используйте соединение из класса TypedListDAO выше
Некоторые легкие микропрограммы, такие как: Dapper (1 cs-файл), PetaPoco, Massive и др…

Ответ №2:

Хотя это правда, что вы можете получить доступ к низкоуровневым считывателям данных и т. Д.. Я думаю, что это отчасти противоречит цели использования ORM. Если вы просто хотите заполнить таблицу данных из коллекции (с фильтрацией или без нее), вы можете использовать статический метод GetMultiAsDataTable (которому вы можете передать выражение предиката, если хотите выполнить фильтрацию). Если вы хотите заменить более сложный SQL (очень полезный для создания отчетов), ознакомьтесь с возможностями динамических списков:

http://www.llblgen.com/documentation/4.0/LLBLGen Pro RTF/hh_start.htm

Спецификация запроса — еще более удобный способ указать динамический запрос и спроецировать его:

http://www.llblgen.com/documentation/4.0/LLBLGen Pro RTF/hh_start.htm