Как выполнить пользовательский оператор SQL в LLBLGen 3.1 (самообслуживание)? - PullRequest
1 голос
/ 19 октября 2011

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

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

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Просто заметил, что на этот вопрос не было ответа. С самообслуживанием вы, вероятно, будете использовать класс 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);

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

0 голосов
/ 28 апреля 2013

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

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

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

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

...