标签: dapper

SELECT*FROM X WHERE使用Dapper ORM标识IN(...)

当IN子句的值列表来自业务逻辑时,使用Dapper ORM使用IN子句编写查询的最佳方法是什么?例如,假设我有一个查询:

SELECT * 
  FROM SomeTable 
 WHERE id IN (commaSeparatedListOfIDs)
Run Code Online (Sandbox Code Playgroud)

commaSeparatedListOfIDs是从业务逻辑传入的,它可以是任何类型的IEnumerable(of Integer).在这种情况下,我将如何构造查询?我是否必须做到目前为止我一直在做的事情,这基本上是字符串连接,还是有一些我不知道的高级参数映射技术?

.net sql dapper

209
推荐指数
7
解决办法
9万
查看次数

有没有办法用Dapper调用存储过程?

对于stackoverflow.com 的Dapper Micro ORM的结果我印象非常深刻.我正在考虑我的新项目,但我有一个担心,有时我的项目需要有存储过程,我在网上搜索了很多但没有找到存储过程的任何东西.那么有没有办法让Dapper使用存储过程?

如果可能,请告诉我,否则我必须以我的方式延长它.

.net orm stored-procedures dapper

196
推荐指数
3
解决办法
11万
查看次数

使用Dapper执行插入和更新

我对使用Dapper很感兴趣 - 但据我所知它只支持Query和Execute.我没有看到Dapper包含一种插入和更新对象的方法.

鉴于我们的项目(大多数项目?)需要进行插入和更新,在插入和更新的同时进行插入和更新的最佳做法是什么?

最好我们不必采用参数构建的ADO.NET方法等.

我现在能想出的最佳答案是使用LinqToSQL进行插入和更新.有更好的答案吗?

c# orm dapper

175
推荐指数
6
解决办法
18万
查看次数

如何使用Dapper执行插入并返回插入的标识?

如何对数据库执行插入并使用Dapper返回插入的标识?

我尝试过这样的事情:

string sql = "DECLARE @ID int; " +
             "INSERT INTO [MyTable] ([Stuff]) VALUES (@Stuff); " +
             "SELECT @ID = SCOPE_IDENTITY()";

var id = connection.Query<int>(sql, new { Stuff = mystuff}).First();
Run Code Online (Sandbox Code Playgroud)

但它没有用.

@Marc Gravell谢谢你的回复.我已经尝试过你的解决方案但是,下面仍有相同的异常跟踪

System.InvalidCastException: Specified cast is not valid

at Dapper.SqlMapper.<QueryInternal>d__a`1.MoveNext() in (snip)\Dapper\SqlMapper.cs:line 610
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in (snip)\Dapper\SqlMapper.cs:line 538
at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param) in (snip)\Dapper\SqlMapper.cs:line 456
Run Code Online (Sandbox Code Playgroud)

c# sql-server dapper

161
推荐指数
4
解决办法
9万
查看次数

使用类属性手动映射列名称

我是Dapper Micro ORM的新手.到目前为止,我能够将它用于简单的ORM相关内容,但我无法使用类属性映射数据库列名.例如:

我有如下数据库表:

Table Name: Person
person_id  int
first_name varchar(50)
last_name  varchar(50)
Run Code Online (Sandbox Code Playgroud)

我有一个名为Person的课程

public class Person 
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

请注意,表中的列名与我尝试映射查询结果的数据的类的属性名不同.

var sql = @"select top 1 PersonId,FirstName,LastName from Person";
using (var conn = ConnectionFactory.GetConnection())
{
    var person = conn.Query<Person>(sql).ToList();
    return person;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,因为列名与对象的(Person)属性不匹配.在这种情况下,我可以在Dapper中手动映射(例如person_id => PersonId)具有对象属性的列名吗?

任何线索或帮助将受到高度赞赏.

dapper

156
推荐指数
11
解决办法
10万
查看次数

如何使用Dapper映射嵌套对象的列表

我目前正在使用Entity Framework进行数据库访问,但想看看Dapper.我有这样的课程:

public class Course{
   public string Title{get;set;}
   public IList<Location> Locations {get;set;}
   ...
}

public class Location{
   public string Name {get;set;}
   ...
}
Run Code Online (Sandbox Code Playgroud)

因此,可以在多个地点教授一门课程.实体框架为我执行映射,因此我的Course对象填充了一个位置列表.我如何与Dapper一起讨论这个问题,它是否可能,或者我必须在几个查询步骤中执行此操作?

orm dapper

112
推荐指数
6
解决办法
7万
查看次数

在Dapper中正确使用Multimapping

我正在尝试使用dapper的Multimapping功能来返回ProductItems和相关Customers的列表.

[Table("Product")]
public class ProductItem
{
    public decimal ProductID { get; set; }        
    public string ProductName { get; set; }
    public string AccountOpened { get; set; }
    public Customer Customer { get; set; }
} 

public class Customer
{
    public decimal CustomerId { get; set; }
    public string CustomerName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的短小精悍的代码如下

var sql = @"select * from Product p 
            inner join Customer c on p.CustomerId = c.CustomerId 
            order by p.ProductName";

var data = con.Query<ProductItem, Customer, ProductItem>( …
Run Code Online (Sandbox Code Playgroud)

dapper

98
推荐指数
4
解决办法
7万
查看次数

交易与精巧点网

我想在多个表上运行多个insert语句.我正在使用dapper.net.我没有看到任何方法来处理与dapper.net的交易.

请分享您对如何使用dapper.net进行交易的想法.

c# transactions dapper

98
推荐指数
6
解决办法
5万
查看次数

如何动态地为Dapper查询创建参数

我有一个价值字典例如"姓名":"亚历克斯"

有没有办法将此传递给Dapper作为查询的参数?

这是一个显示我想要做的事情的例子.

IDictionary<string, string> args = GetArgsFromSomewhere();
string query = "select * from people where Name = @Name";
var stuff = connection.Query<ExtractionRecord>(query, args);
Run Code Online (Sandbox Code Playgroud)

.net c# dapper

77
推荐指数
2
解决办法
4万
查看次数

Multi-Mapper用于创建对象层次结构

我一直在玩这个,因为它看起来感觉很像记录的帖子/用户示例,但它略有不同,并不适合我.

假设以下简化设置(联系人有多个电话号码):

public class Contact
{
    public int ContactID { get; set; }
    public string ContactName { get; set; }
    public IEnumerable<Phone> Phones { get; set; }
}

public class Phone
{
    public int PhoneId { get; set; }
    public int ContactID { get; set; } // foreign key
    public string Number { get; set; }
    public string Type { get; set; }
    public bool IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望最终能够返回一个与多个Phone对象联系的东西.这样,如果我有2个联系人,每个联系人有2个电话,我的SQL将返回一个连接,作为结果集共4行.然后Dapper将弹出2个接触对象,每个接触对象有两部手机.

这是存储过程中的SQL:

SELECT *
FROM Contacts
    LEFT …
Run Code Online (Sandbox Code Playgroud)

dapper multi-mapping

75
推荐指数
7
解决办法
5万
查看次数