我对使用Dapper很感兴趣 - 但据我所知它只支持Query和Execute.我没有看到Dapper包含一种插入和更新对象的方法.
鉴于我们的项目(大多数项目?)需要进行插入和更新,在插入和更新的同时进行插入和更新的最佳做法是什么?
最好我们不必采用参数构建的ADO.NET方法等.
我现在能想出的最佳答案是使用LinqToSQL进行插入和更新.有更好的答案吗?
我试图找到Dapper并且似乎缺少一些非常基础的东西,有人可以解释下面的代码来自Dapper主页上的Google代码并解释为什么没有From子句,以及第二个参数查询方法(动态)传递一个匿名类型,我收集这是以某种方式设置一个命令对象,但想用一个凡人的术语解释.
谢谢你,斯蒂芬
public class Dog {
public int? Age { get; set; }
public Guid Id { get; set; }
public string Name { get; set; }
public float? Weight { get; set; }
public int IgnoredProperty {
get { return 1; }
}
}
var guid = Guid.NewGuid();
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });
dog.Count().IsEqualTo(1);
dog.First().Age.IsNull();
dog.First().Id.IsEqualTo(guid);
Run Code Online (Sandbox Code Playgroud) 我一直在玩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查询,列出每个字段?
谢谢!
我最近一直在使用dapper,总而言之,除了使用表变量之外,它没有任何问题。
为了进行演示,我使用了此线程中的修改示例。
这段代码运行没有问题:
int tally = connection.Execute(
"create table #t(Name nvarchar(max), Age int)\n" +
"insert #t (Name,Age) values(@Name, @Age)", new[]
{
new {Age = 1, Name = "sam"},
new {Age = 2, Name = "bob"}
});
Run Code Online (Sandbox Code Playgroud)
但这并没有:
int tally = connection.Execute(
"create table @t(Name nvarchar(max), Age int)\n" +
"insert @t (Name,Age) values(@Name, @Age)", new[]
{
new {Age = 1, Name = "sam"},
new {Age = 2, Name = "bob"}
});
Run Code Online (Sandbox Code Playgroud)
唯一的变化是使用表变量而不是临时表 ( @ instead #)。Dapper(或链中的其他任何东西?)似乎以某种方式将其与参数混合并返回“必须声明表变量@t …