Dapper SqlMapperExtensions / Dapper.Contrib? - PullRequest
10 голосов
/ 23 ноября 2011

Кажется, есть проект DapperExtensions, но в проекте Dapper также есть класс SqlMapperExtensions.Есть ли совпадение?Один предпочтительнее другого?Я не могу найти документацию на Dapper.Contrib.

Ответы [ 3 ]

5 голосов
/ 23 ноября 2011

Dapper.Contrib - это имя сборки: https://github.com/StackExchange/Dapper/tree/master/Dapper.Contrib

SqlMapperExtensions - это статический класс, содержащий методы contrib в Dapper.Contrib: https://github.com/StackExchange/Dapper/blob/master/Dapper.Contrib/SqlMapperExtensions.cs

Лучшей документацией являетсякласс тестового набора: https://github.com/StackExchange/Dapper/blob/master/Dapper.Tests.Contrib/TestSuite.cs

3 голосов
/ 17 декабря 2013

Я написал первый Dapper.Contrib давным-давно после некоторого разговора с Сэмом. Я не знаю деталей пакета Extensions, и они, кажется, более или менее выполняют ту же самую задачу CRUD, но пакет Contrib может быть несколько быстрее в некоторых сценариях, поскольку он имеет встроенный кэш для запросов и интерфейса POCO на основе внутреннего "грязного" отслеживания. Снято с тест-кода:

        using (var connection = GetOpenConnection())
        {
            connection.Get<User>(3).IsNull();

            var id = connection.Insert(new User {Name = "Adam", Age = 10});

            //get a user with "isdirty" tracking
            var user = connection.Get<IUser>(id);
            user.Name.IsEqualTo("Adam");
            connection.Update(user).IsEqualTo(false);    //returns false if not updated, based on tracking
            user.Name = "Bob";
            connection.Update(user).IsEqualTo(true);    //returns true if updated, based on tracking
            user = connection.Get<IUser>(id);
            user.Name.IsEqualTo("Bob");

            //get a user with no tracking
            var notrackedUser = connection.Get<User>(id);
            notrackedUser.Name.IsEqualTo("Bob");
            connection.Update(notrackedUser).IsEqualTo(true);   //returns true, even though user was not changed
            notrackedUser.Name = "Cecil";
            connection.Update(notrackedUser).IsEqualTo(true);
            connection.Get<User>(id).Name.IsEqualTo("Cecil");

            connection.Query<User>("select * from Users").Count().IsEqualTo(1);
            connection.Delete(user).IsEqualTo(true);
            connection.Query<User>("select * from Users").Count().IsEqualTo(0);

            connection.Update(notrackedUser).IsEqualTo(false);   //returns false, user not found

Contrib не имеет привлекательной системы предикатов, которую имеет Extensions. ПРИМЕЧАНИЕ есть хорошая тема на Dapper.Contrib здесь Dapper.Rainbow VS Dapper.Contrib

3 голосов
/ 13 января 2012

Я думаю, что user1003841 имел в виду https://github.com/tmsmith/Dapper-Extensions.

Авторы - Тэд Смит и Пейдж Брукс - так что это не работа Сэма Шафрона.На странице проекта написано «Эта библиотека - отдельная работа от Dapper.Contrib».

...