【问题标题】:Dapper SqlMapperExtensions / Dapper.Contrib?Dapper SqlMapperExtensions / Dapper.Contrib?
【发布时间】:2011-11-22 20:23:18
【问题描述】:

貌似有一个DapperExtensions项目,其实Dapper项目里也有一个SqlMapperExtensions类。有重叠吗?一个比另一个更受欢迎吗?我在 Dapper.Contrib 上找不到任何文档。

【问题讨论】:

    标签: .net orm dapper


    【解决方案1】:

    【讨论】:

    • Dapper.Contrib 在 Nuget 中?在同一个项目中使用Dapper.ContribDapper.Rainbow 是一种好习惯?
    【解决方案2】:

    在很久以前与 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

    【讨论】:

    • 我确定我遗漏了一些愚蠢而明显的东西 - 但我在第 3 行得到“用户不包含 IsNull 的定义”。IsNull 来自哪里?谢谢。
    • IsNull() 方法只是一个简单的测试方法,它包含在 GitHub 上的 Dapper-source 中
    【解决方案3】:

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

    作者是 Thad Smith 和 Page Brooks - 所以这不是 Sam Saffron 的作品。项目页面显示“这个库是与 Dapper.Contrib 分开的”。

    【讨论】:

    • “作者是 Thad Smith 和 Page Brooks - 所以这不是 Sam Saffron 的作品。”让我哈哈大笑,因为原始答案来自谁
    猜你喜欢
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多