Stackoverflow/dapper的Dapper-Extensions用法(一)

Dapper-Extensions是Dapper ORM的扩展库,提供自动化的CRUD操作,支持分页及谓词系统,简化常见数据库操作。无需额外属性或继承。

http://www.cnblogs.com/Sinte-Beuve/p/4612971.html

Dapper-Extensions

Dapper Extensions is a small library that complements Dapper by adding basic CRUD operations (Get, Insert, Update, Delete) for your POCOs. For more advanced querying scenarios, Dapper Extensions provides a predicate system. The goal of this library is to keep your POCOs pure by not requiring any attributes or base class inheritance.

github:https://github.com/tmsmith/Dapper-Extensions

  • Dapper是一个开源轻的量级的orm,他的优点和用法在之前写的博客中有提到。可是它只支持带sql语句的CRUD。
  • Dapper-Extensions也是一个开源库,他在Dapper的基础上封装了基本的CRUD操作,使得一些简单的数据库操作可以不用自己写sql语句。使用起来更方面。

若不熟悉Dapper的,请移步:

后续文档翻译

下面是对他的用法的描述,也就是对项目文档的翻译。如果读者英文不错可以直接看原版文档,见github。

Introduction

Dapper Extensions是github上的一个开源库是对StackOVerflow开发的Dapper ORM的一个扩展。它增加了基础的CRUD操作((Get, Insert, Update, Delete)),对更高级的查询场景,该类库还提供了一套谓词系统。它的目标是保持POCOs的纯净,不需要额外的attributes和类的继承。

自定义映射请参见 ClassMapper

Features

  • 零配置
  • 自动映射POCOs的CRUD操作
  • GetList, Count等方法可以用于更高级的场景。
  • GetPage for returning paged result sets.支持分页
  • 自动支持Guid和Integer类型的主键,(也可以手动指定其他键类型)
  • 通过使用ClassMapper可以使保证POCOs纯净。 (Attribute Free!)
  • 可以通过使用ClassMapper来自定义entity-table映射
  • 支持联合主键
  • POCO类名默认与数据表名相匹配,也可以自定义
  • 易于使用的 Predicate System适用于高级场合
  • 在生成SQL语句时正确转义表名和类名 (Ex: SELECT FirstName FROM Users WHERE Users.UserId = @ UserId_0)
  • 覆盖单元测试(覆盖了150+个单元测试)

Naming Conventions(命名约定)

  • POCO类名与数据库中表名匹配,多元化(Pluralized)的表名(暂时理解为别名吧)可以通过PlurizedAutoClassMapper来自定义。
  • POCO类中属性名和数据库表中的类名匹配。
  • 暂约定主键被命名为Id.使用其他主键需要自定义映射(ClassMapper)。

Installation

Nuget:
http://nuget.org/List/Packages/DapperExtensions

PM> Install-Package DapperExtensions

Examples

pernson POCO的定义

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public bool Active { get; set; }
    public DateTime DateCreated { get; set; }
}

Get Operation

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    int personId = 1;
    Person person = cn.Get<Person>(personId);
    cn.Close();
}

Simple Insert Operation

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    Person person = new Person { FirstName = "Foo", LastName = "Bar" };
    int id = cn.Insert(person);
    cn.Close();
}

Advanced Insert Operation (Composite Key)复合主键

//返回dynamic类型,若主键为单,返回主键值,若主键为复合的,返回IDictionary<string,object>
 public static dynamic Insert<T>(this IDbConnection connection, T entity, IDbTransaction transaction = null, int? commandTimeout = null) where T : class
public class Car
{
    public int ModelId { get; set; }
    public int Year { get; set; }
    public string Color { get; set; }
}

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    Car car = new Car { Color = "Red" };
   //返回o
    var multiKey = cn.Insert(car);
    cn.Close();

    int modelId = multiKey.ModelId;
    int year = multiKey.Year;
}

Simple Update Operation

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    int personId = 1;
    Person person = _connection.Get<Person>(personId);
    person.LastName = "Baz";
    cn.Update(person);
    cn.Close();
}

Simple Delete Operation

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    Person person = _connection.Get<Person>(1);
    cn.Delete(person);
    cn.Close();
}

GetList Operation (with Predicates)

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    var predicate = Predicates.Field<Person>(f => f.Active, Operator.Eq, true);
    IEnumerable<Person> list = cn.GetList<Person>(predicate);
    cn.Close();
}

Generated SQL

SELECT 
   [Person].[Id]
 , [Person].[FirstName]
 , [Person].[LastName]
 , [Person].[Active]
 , [Person].[DateCreated] 
FROM [Person] 
WHERE ([Person].[Active] = @Active_0)

Count Operation (with Predicates)

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    var predicate = Predicates.Field<Person>(f => f.DateCreated, Operator.Lt, DateTime.UtcNow.AddDays(-5));
    int count = cn.Count<Person>(predicate);
    cn.Close();
}      

Generated SQL

SELECT 
   COUNT(*) Total 
FROM [Person] 
WHERE ([Person].[DateCreated] < @DateCreated_0)

作者:Sinte-Beuve

出处:http://www.cnblogs.com/Sinte-Beuve/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责


<think>好的,我现在需要帮助用户解决在RHEL服务器上安装Docker时遇到的问题。根据用户提供的引用信息,错误主要是找不到仓库的元数据,可能是因为Docker的仓库配置不正确或者RHEL版本与仓库不兼容。首先,我得回顾下用户提到的具体错误和解决方案。 用户提到在执行yum install dkms时遇到了404错误,无法下载repomd.xml文件。引用[2]中指出,访问https://download.docker.com/linux/rhel/9/时发现只有s390x和source目录,而没有x86_64的包,这说明Docker官方可能没有为RHEL 9的x86_64架构提供稳定的仓库。所以,用户遇到的问题可能与RHEL版本不兼容有关。 接下来,我需要确定常见的解决方案。通常,安装Docker在RHEL上需要添加正确的仓库配置,并且确保系统版本与仓库支持的版本匹配。如果官方仓库中没有对应的包,可能需要使用其他方法,比如使用CentOS的仓库或者Docker的edge/test版本。另外,用户可能需要安装必要的依赖项,比如yum-utils来管理仓库。 另个可能性是GPG密钥的问题,用户提到需要补全RPM-GPG-KEY-rockyofficial,这可能意味着在添加仓库时没有正确导入GPG密钥,导致验证失败。所以,步骤中应该包括导入正确的GPG密钥。 另外,用户可能没有启用额外的仓库,比如RHEL的附加仓库或EPEL仓库,这些有时候是安装第三方软件所必需的。例如,EPEL(Extra Packages for Enterprise Linux)提供了许多额外的软件包,可能包含所需的依赖项。 还要考虑用户是否使用了正确的Docker版本。对于RHEL,可能需要使用Docker EE(Enterprise Edition)而不是CE(Community Edition),或者需要订阅才能访问某些仓库。不过,根据用户提供的引用[1],Docker EE的安装需要满足特定前提条件,比如注册系统、启用仓库等。用户可能需要按照官方文档的步骤来配置这些。 总结可能的解决步骤: 1. 检查系统版本是否与Docker仓库支持的版本匹配。如果使用RHEL 9,而官方仓库中没有x86_64的包,可能需要降级到RHEL 8或寻找替代仓库。 2. 添加正确的Docker仓库配置文件,确保URL正确,并且架构匹配。 3. 导入Docker的GPG密钥,以验证软件包签名。 4. 安装必要工具,如yum-utils,以便管理仓库。 5. 如果官方仓库不可用,尝试使用CentOS的仓库或EPEL。 6. 清理yum缓存并重新生成元数据,解决可能的缓存问题。 同时,用户可能需要启用RHEL的额外订阅,比如使用subscription-manager来启用附加仓库。或者考虑使用Podman替代Docker,因为Red Hat推荐使用Podman作为容器引擎,尤其是在RHEL 8及更高版本中。 需要验证每步是否正确,比如检查仓库配置文件的路径是否正确,是否存在拼写错误,或者是否使用了错误的发行版名称。例如,某些情况下,可能需要将rhel替换为centos,但需要注意兼容性问题。 此外,用户提到的错误信息中提到了IP地址,这可能是个网络问题,但根据引用内容,更可能的问题还是仓库配置不正确,导致yum无法找到正确的资源。需要确保仓库的baseurl或镜像列表是正确的,并且可访问。 最后,如果所有方法都失败,用户可能需要联系Docker支持或Red Hat支持,以确认RHEL 9是否被支持,或者是否有其他解决方案。同时,提供替代方案,比如使用其他容器工具,可能也是个有效的建议。</think>在RHEL服务器上安装Docker时遇到仓库元数据下载失败的问题,通常与仓库配置、系统版本或网络访问有关。以下是逐步解决方案: ### 1. 验证系统版本与仓库兼容性 Docker官方仓库可能未支持RHEL 9的x86_64架构。通过以下命令检查系统版本: ```bash cat /etc/redhat-release # 输出示例:Red Hat Enterprise Linux release 9.0 (Plow) ``` 若显示为RHEL 9,需暂时切换至RHEL 8仓库配置(若系统允许降级)或修改仓库URL中的版本号[^2]。 ### 2. 修正Docker仓库配置文件 编辑或创建文件`/etc/yum.repos.d/docker-ce.repo`,将URL中的`rhel/9`改为`rhel/8`: ```ini [docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://download.docker.com/linux/rhel/8/$basearch/stable enabled=1 gpgcheck=1 gpgkey=https://download.docker.com/linux/rhel/gpg ``` ### 3. 导入GPG密钥 确保密钥正确导入: ```bash sudo rpm --import https://download.docker.com/linux/rhel/gpg ``` ### 4. 安装必要工具 安装`yum-utils`以支持仓库管理: ```bash sudo yum install -y yum-utils ``` ### 5. 清理并重建缓存 ```bash sudo yum clean all sudo rm -rf /var/cache/yum sudo yum makecache ``` ### 6. 替代方案:使用EPEL仓库 若Docker仓库仍不可用,尝试通过EPEL安装: ```bash sudo yum install -y epel-release sudo yum install -y docker ``` ### 7. 终极解决方案:改用Podman RHEL 8/9默认推荐使用Podman(兼容Docker CLI): ```bash sudo yum install -y podman systemctl start podman ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值