使用简洁的 DAL 和 C#

2024-03-10

我有一个使用 Dapper 的数据访问层,但不禁觉得它可以更加优雅。 DAL 只是传递参数并根据模型的命名响应映射模型,因此该部分至少是直接的,但我讨厌看起来重复的代码。

这是一个例子

 public IEnumerable<Product> ProductSearch(int? userId, DateTime?      modifiedAfter, DateTime? modifiedBefore, Guid? productId)
    {
        IList<Product> products;

        using (var connection = _connection.OpenConnection())
        {
            const string sproc = "dbo.stp_Product_Search";

            products = connection.Query<JobProduct>(sproc, new
            {
                User_ID = userId,
                Modified_After = modifiedAfter,
                Modified_Before = modifiedBefore,
                Product_ID = productId
            }, commandType: CommandType.StoredProcedure)
            .ToList();
        }
        return products;
    }

我有很多类似的代码,但使用了不同的参数和实体。有人有什么好的例子吗?


感谢您的建议。这就是我最终使用的方法,意味着我不必每次都编写打开连接的 using 语句,从而使我的类减少代码行数:

public class Repository<T> where T : class
{
    protected readonly IComplianceConnection Connection;

    public Repository(IComplianceConnection connection)
    {
        Connection = connection;
    }

    public IEnumerable<T> Get(string query, object arguments)
    {
        IList<T> entities;

        using (var connection = Connection.OpenConnection())
        {
            entities = connection.Query<T>(query, arguments, commandType: CommandType.StoredProcedure).ToList();
        }

        return entities;
    }

    public T GetSingleOrDefault(string query, object arguments)
    {
        T entity;

        using (var connection = Connection.OpenConnection())
        {
            entity =
                connection.Query<T>(query, arguments, commandType: CommandType.StoredProcedure).SingleOrDefault();
        }

        return entity;
    }

    public void Update(string query, object arguments)
    {
        using (var connection = Connection.OpenConnection())
        {
            connection.Execute(query, arguments, commandType: CommandType.StoredProcedure);
        }
    }

    public int ExecuteScalar(string query, object arguments)
    {
        var id = 0;
        using (var connection = Connection.OpenConnection())
        {
            id = connection.ExecuteScalar<int>(query, arguments, commandType: CommandType.StoredProcedure);
        }
        return id;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用简洁的 DAL 和 C# 的相关文章

  • 以相反的顺序迭代可变参数模板参数

    如果我手动反转传递给它的模板参数的顺序 以下代码将起作用 template
  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • 切换图片框可见性 C#

    为什么图片框控件的可见性属性在这里不起作用 我最初将它们设置为 false 以便在屏幕加载时它们不可见 但后来我想切换这个 我已完成以下操作 但似乎不起作用 这是一个 Windows 窗体应用程序 private void Action w
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • 使用不带参数的 Split() 时,默认分隔符是什么?

    所以我看了看String Split 今天 C 中的方法 我意识到你也可以向它传递零参数 这是我从未考虑过的 使用时默认的分隔符是什么Split 没有任何参数 如果没有值 则为空白 来源自here https msdn microsoft
  • 返回 int& 的函数[重复]

    这个问题在这里已经有答案了 我在网上查了一下发现一篇试图解释的文章std move和右值 http thbecker net articles rvalue references section 01 html并发现了一些我实在无法掌握的东
  • 为什么假设 send 可能返回的数据少于在阻塞套接字上传输的请求数据?

    在流套接字上发送数据的标准方法始终是调用 send 并写入一大块数据 检查返回值以查看是否发送了所有数据 然后再次调用 send 直到整个消息被接受 例如 这是一个常见方案的简单示例 int send all int sock unsign
  • C 中的模仿函数重写

    具体来说 函数重写能够调用基本重写方法 这有两部分 一个是预编译的库代码 1 另一个是库的用户代码 2 我在这里实现了一个尽可能最小的经典 Person 和 Employee 示例 非常感谢了解 OOP 概念的铁杆 C 开发人员的回应 我正
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 从包含大量文件的目录中检索文件

    我的目录包含近 14 000 000 个 wav 格式的音频样本 所有普通存储 没有子目录 我想循环浏览文件 但是当我使用DirectoryInfo GetFiles 在该文件夹上 整个应用程序冻结了几分钟 可以用另一种方式完成吗 也许读取
  • asp.net c# 防止在从服务器端代码更改索引时触发 selectedindexchanged 事件

    我在同一个 aspx 页面上有两个下拉列表控件
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • Dynamics Crm:获取状态代码/状态代码映射的元数据

    在 Dynamics CRM 2011 中 在事件实体上 状态原因 选项集 也称为状态代码 与 状态 选项集 也称为状态代码 相关 例如看这个截图 当我使用 API 检索状态原因选项集时 如下所示 RetrieveAttributeRequ
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio

随机推荐

  • 从 .net dll 返回结构体 (C#)

    我有一个 net DLL C 它通过 TCP 从传感器接收实时 大量 数据 数据以自定义对象数组的形式出现 称之为 SensorPacket 它有大约 20 个字段 主要是浮点型和整数型 我已经通过事件将其发送到 matlab 工作正常 但
  • Whatsapp 或 telegram 等应用程序如何监听 Android 上的来电/消息事件?

    我构建了一个 VoIP 呼叫应用程序 它与服务器保持持久连接以监听任何来电 我实现了一个后台服务来做到这一点 但自从 Oreo 以来 由于引入了后台执行限制 https developer android com about version
  • Android 13 - 如何请求 WRITE_EXTERNAL_STORAGE

    我的 Android 应用程序的目标版本是 Android 13 API 33 WRITE EXTERNAL STORAGE 权限似乎在 API 33 即 Android 12 及以下版本 下运行良好 但在 Android 13 上运行应用
  • CSS - 粘性页脚[重复]

    这个问题在这里已经有答案了 这个问题似乎有很多已解决的问题 但它们似乎都不适合我 我创建了这个小 jsfiddle 来向您展示 jsfiddle 页脚 http jsfiddle net 2jn3J 还有CSS footer width 7
  • Link R闪亮select输入项打开文件actionButton

    使用 R闪亮 是否可以将 selectInput 项目链接到打开文件操作按钮 我想调整操作按钮的 onclick 参数来实现它 请在下面找到一个可重现的示例 假设 www 文件夹中有 file 1 pdf 和 file 2 pdf 如何打开
  • 忽略这些 kotlin 的 proguard 注释是否安全?

    我不明白为什么我会从混淆器那里得到这些注释 也不明白我是否必须采取任何措施来解决它们 Note kotlin internal PlatformImplementationsKt can t find dynamically referen
  • Reactjs如何在map函数中使用ref?

    我正在通过数组进行映射 并为每个项目显示一个带有文本的按钮 假设我希望单击按钮时 下面的文本会将其颜色更改为红色 如何定位按钮的同级按钮 我尝试使用 ref 但由于它是映射的 jsx 因此只会声明最后一个 ref 元素 这是我的代码 cla
  • 在 Apple Appstore 中发布我的应用程序之前,我能否获得该应用程序的链接? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在将应用程序发布到应用商店之前 我能否获得应用程序的链接 直接从设备打开它 我想在我的应用程序中单击 评价此应用程序 按钮 在 Googl
  • 缓存条目未使用

    我们有一个使用以下技术的 Web 应用程序 JSF 2 0 EJB 3 1 JPA 2 0 JBoss AS 7 1 Final 有时我们会突然出现以下异常 09 46 29 664 ERROR org jboss ejb3 invocat
  • 如何让 GestureDetector 在触摸 Flutter 中的空白区域时也起作用

    我有2个Text里面的小部件GestureDetector The onTap回调仅在我触摸时通知Text但不是我里面的空白空间Container 如何让这个通知就像我触摸按钮一样 Very very very long long ng l
  • Facebook graphApi oAuth - 如何获取访问令牌?

    我正在尝试使用 JavaScript Facebook SDK 获取某个用户的留言墙 当我使用图形 API Explorer 时 它工作正常 但是当我在我的网站上尝试同样的操作时 出现以下错误 code 104 message An acc
  • 实例化列表时 是什么类型?

    我在多个不同的地方看到人们实例化列表或 ArrayList 例如 List
  • Java EE 容器中的同步请求-应答模式

    我希望在 Java EE 容器内使用 JMS 实现同步请求 答复模式 顺序会是这样的 浏览器向 Web 应用程序发出数据请求 这是一个阻塞请求 比如在线程 T1 上 Web 应用程序需要连接到远程 Web 服务才能满足上述请求 因此 它形成
  • 在真实设备与模拟器上测试 iOS 测试

    我是 iPhone iPad 开发新手 即将完成我的第一个应用程序 我正在寻找一些一般性建议 我知道在实际设备上进行测试很重要 而不仅仅是模拟器 人们在交易设备上进行测试时通常会遇到哪些类型的事情 而他们在模拟器中看不到 该应用程序本身主要
  • pl/sql 函数中的 select 子句返回错误值

    当我这样做时 select sum m mot from rmtq mq join rmo m on mq id m id where mq another 138 返回值 2 这是正确的 但是当我将此代码放入函数中时 create or
  • 多个主屏幕小部件的单个配置活动

    我的 Android 应用程序有一个针对不同 Homescreen 小部件的配置活动 我在配置活动中获取 WidgetId 如下所示 widgetid extras getInt AppWidgetManager EXTRA APPWIDG
  • iOS 6 保存/恢复应用程序状态功能

    我正在尝试在 iOS 6 上使用新的保存 恢复应用程序状态功能 但是如果我杀死了应用程序 则不会调用 application shouldRestoreApplicationState 方法 因此它不会恢复应用程序状态 但如果我正在运行它从
  • 正交相机旋转

    我可以使用此代码旋转相机 camera zoom 3 in constructor if camera zoom gt 1 camera zoom 0 01f camera rotate 15 this is done in render
  • Shrine gem - 如何从 s3 删除上传的图像

    显然 remove attachment插件可以完成检查和提交的技巧 但如何从控制器调用该方法 所有允许您设置表单字段的插件 remove attachment remote url data uri 的工作方式是向您的模型添加 gette
  • 使用简洁的 DAL 和 C#

    我有一个使用 Dapper 的数据访问层 但不禁觉得它可以更加优雅 DAL 只是传递参数并根据模型的命名响应映射模型 因此该部分至少是直接的 但我讨厌看起来重复的代码 这是一个例子 public IEnumerable