Dapper SqlMapperExtensions / Dapper.Contrib?

时间:2011-11-22 20:23:19

标签: .net orm dapper

似乎有一个DapperExtensions项目,但Dapper项目中还有一个SqlMapperExtensions类。有重叠吗?一个比另一个更受欢迎吗?我在Dapper.Contrib上找不到任何文档。

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:3)

我认为user1003841指的是https://github.com/tmsmith/Dapper-Extensions

作者是Thad Smith和Page Brooks - 所以这不是Sam Saffron的作品。项目页面上写着“这个库与Dapper.Contrib是一个单独的工作”。

答案 2 :(得分:3)

在与Sam讨论之后,我很久以前写过第一个Dapper.Contrib。我不知道Extensions-package的细节,他们似乎或多或少地做同样的CRUD事情,但Contrib-package在某些情况下可能会更快一些,因为它有一个用于查询和界面的内置缓存基于内部“脏”跟踪的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