Dapper可用于更新和插入模型吗?

Cas*_*ton 7 .net c# sql dapper

我一直在玩Dapper,试图看看它是否是Entity Framework的一个很好的轻量级替代品.到目前为止,我已经对它能够快速<model>从数据库中提取实体并将其转换为模型的IEnumerable,或者仅创建模型的单个实例留下了深刻的印象.非常光滑.

但是我没有看到的是将该模型更新回db的简单方法.

例:

public class Dog
{
    public Guid Id { get; set; }
    public int? Age { get; set; }
    public string Name { get; set; }
    public float? Weight { get; set; }
} 
Run Code Online (Sandbox Code Playgroud)

我们可以轻松地创建一个IEnumerable of Dog,如下所示:

IEnumerable<Dog> dogs = connection.Query<Dog>("SELECT * FROM Dog")
Run Code Online (Sandbox Code Playgroud)

或者,对于单个实例:

Dog dog = connection.Query<Dog>("SELECT * FROM Dog WHERE DogId = @dogid")
Run Code Online (Sandbox Code Playgroud)

一切都很好.但是现在,如果我们对"dog"进行更改(比如说,改变它的重量),是否有一种灵活,快速,简单的方法可以将该实体重新放回数据库而无需进行手动UPDATE查询,列出每个字段?

谢谢!

Rob*_*ess 11

您可以使用以下SqlMapperExtensionsDapper.Contrib.Extensions:

using Dapper;
using Dapper.Contrib.Extensions;

// don't forget the using since Update is an extension method

Dog entity; // you got it from somewhere
entity.Name = "fancy new dog name";
connection.Update(entity);
Run Code Online (Sandbox Code Playgroud)

为了使其工作,您需要将[Key]注释添加到您的id.应该看起来像这样:

using System.ComponentModel.DataAnnotations;

public class Dog
{
    [Key]
    public long Id { get; set; }
    public int? Age { get; set; }
    public string Name { get; set; }
    public float? Weight { get; set; }
} 
Run Code Online (Sandbox Code Playgroud)


Fel*_*ano 7

Dapper是一种微型Orm,具有简单快速的特点.您描述的行为与完全成熟的ORM更相关,这意味着有一些关闭会话概念,映射和查询生成(希望驱动程序适用于不同的SQL风格).这绝对不是Dapper的精神,无论如何都要做更新/插入easyyer的过程,简单的ado.net,接受POCO对象作为查询的参数,即:

.Execute("update mydogs  set age=@Age where id=@Id",dog);
Run Code Online (Sandbox Code Playgroud)