Dapper 可以用来更新和插入模型吗?
Can Dapper be used to update and insert models?
我一直在玩 Dapper,试图看看它是否是 Entity Framework 的一个很好的轻量级替代品。到目前为止,它能够从数据库中快速提取实体 <model>
并将其放入模型的 IEnumerable 中,或者只创建模型的单个实例,这给我留下了深刻的印象。非常光滑。
但我没有看到将该模型更新回数据库的简单方法。
示例:
public class Dog
{
public Guid Id { get; set; }
public int? Age { get; set; }
public string Name { get; set; }
public float? Weight { get; set; }
}
我们可以很容易地创建一个 Dog 的 IEnumerable,如下所示:
IEnumerable<Dog> dogs = connection.Query<Dog>("SELECT * FROM Dog")
或者,对于单个实例:
Dog dog = connection.Query<Dog>("SELECT * FROM Dog WHERE DogId = @dogid")
一切都很好。但是现在,如果我们对 "dog" 进行更改(比如,只更改它的权重),是否有一种灵活、快速、简单的方法可以将该实体返回到数据库中,而无需进行手动更新查询,列出每个字段?
谢谢!
Dapper是一个Micro-Orm,具有简单、快速的特点。您描述的行为与完全成熟的 ORM 更相关,这意味着具有某种会话概念、映射和查询生成(希望有不同 SQL 风格的驱动程序)。这绝对不是 Dapper 的精神,无论如何使 updating/inserting 的过程比普通 ado.net 更容易,接受 POCO 对象作为查询的参数,即:
.Execute("update mydogs set age=@Age where id=@Id",dog);
您可以使用 SqlMapperExtensions
class 来自 Dapper.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);
为了使其正常工作,您需要将 [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; }
}
我一直在玩 Dapper,试图看看它是否是 Entity Framework 的一个很好的轻量级替代品。到目前为止,它能够从数据库中快速提取实体 <model>
并将其放入模型的 IEnumerable 中,或者只创建模型的单个实例,这给我留下了深刻的印象。非常光滑。
但我没有看到将该模型更新回数据库的简单方法。
示例:
public class Dog
{
public Guid Id { get; set; }
public int? Age { get; set; }
public string Name { get; set; }
public float? Weight { get; set; }
}
我们可以很容易地创建一个 Dog 的 IEnumerable,如下所示:
IEnumerable<Dog> dogs = connection.Query<Dog>("SELECT * FROM Dog")
或者,对于单个实例:
Dog dog = connection.Query<Dog>("SELECT * FROM Dog WHERE DogId = @dogid")
一切都很好。但是现在,如果我们对 "dog" 进行更改(比如,只更改它的权重),是否有一种灵活、快速、简单的方法可以将该实体返回到数据库中,而无需进行手动更新查询,列出每个字段?
谢谢!
Dapper是一个Micro-Orm,具有简单、快速的特点。您描述的行为与完全成熟的 ORM 更相关,这意味着具有某种会话概念、映射和查询生成(希望有不同 SQL 风格的驱动程序)。这绝对不是 Dapper 的精神,无论如何使 updating/inserting 的过程比普通 ado.net 更容易,接受 POCO 对象作为查询的参数,即:
.Execute("update mydogs set age=@Age where id=@Id",dog);
您可以使用 SqlMapperExtensions
class 来自 Dapper.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);
为了使其正常工作,您需要将 [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; }
}