标签: dapper

Dapper是否支持SQL 2008表值参数?

有谁知道是否可以使用Dapper 将表值参数数据传递给存储过程?

.net dapper

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

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万
查看次数

Dapper.NET和存储过程具有多个结果集

有没有办法使用Dapper.NET与返回多个结果集的存储过程?

在我的例子中,第一个结果集是一行,只有一列; 如果是,0则调用成功,第二个结果集将包含实际的行/列数据.(如果它不为零,则会发生错误,并且不会提供第二个结果集)

有没有机会用Dapper.NET处理这个?到目前为止,我只回到那个单身0- 但仅此而已.

更新:好的,它工作正常 - 只要结果集没有.2是单个实体:

Dapper.SqlMapper.GridReader reader = 
    _conn.QueryMultiple("sprocname", dynParams, 
    commandType: CommandType.StoredProcedure);

int status = reader.Read<int>().FirstOrDefault();
MyEntityType resultObj = reader.Read<MyEntityType>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

现在,我还有另一项要求.

对于第二个结果集,Dapper的多映射(将从SQL Server返回的单行拆分为两个独立的实体)似乎尚未得到支持(至少似乎没有.Read<T>可以处理的重载)多映射).

如何将该行拆分为两个实体?

sql-server stored-procedures multiple-resultsets dapper

73
推荐指数
3
解决办法
5万
查看次数

如何在Dapper.Net中编写一对多查询?

我已经编写了这个代码来实现一对多的关系,但它不起作用:

using (var connection = new SqlConnection(connectionString))
{
   connection.Open();

   IEnumerable<Store> stores = connection.Query<Store, IEnumerable<Employee>, Store>
                        (@"Select Stores.Id as StoreId, Stores.Name, 
                                  Employees.Id as EmployeeId, Employees.FirstName,
                                  Employees.LastName, Employees.StoreId 
                           from Store Stores 
                           INNER JOIN Employee Employees ON Stores.Id = Employees.StoreId",
                        (a, s) => { a.Employees = s; return a; }, 
                        splitOn: "EmployeeId");

   foreach (var store in stores)
   {
       Console.WriteLine(store.Name);
   }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以发现错误吗?

编辑:

这些是我的实体:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public …
Run Code Online (Sandbox Code Playgroud)

.net c# dapper

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

如何在.NET中使用Dapper处理数据库连接?

我一直在玩Dapper,但我不确定处理数据库连接的最佳方法.

大多数示例显示在示例类中创建的连接对象,甚至在每个方法中.但是我觉得在每个clss中引用连接字符串都是错误的,即使它是从we​​b.config中提取的.

我的经验是使用DbDataContextDbContext使用Linq to SQL或Entity Framework,所以这对我来说是新的.

使用Dapper作为我的数据访问策略时,如何构建我的Web应用程序?

.net c# dapper

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

Dapper.Rainbow VS Dapper.Contrib

有人可以解释一下Dapper.RainbowDapper.Contrib之间的区别吗?

我的意思是你什么时候使用Dapper.Contrib的SqlMapperExtensions.cs,你什么时候应该使用Dapper.Rainbow?

orm dapper dapper-rainbow

64
推荐指数
2
解决办法
3万
查看次数

使用Dapper,批量插入的时间比预期的要长

阅读本文后,我决定仔细研究一下我使用Dapper的方式.

我在一个空数据库上运行此代码

var members = new List<Member>();
for (int i = 0; i < 50000; i++)
{
    members.Add(new Member()
    {
        Username = i.toString(),
        IsActive = true
    });
}

using (var scope = new TransactionScope())
{
    connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members);

    scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)

花了大约20秒钟.这是2500插入/秒.不错,但考虑到博客达到45k插入/秒,也不是很好.在Dapper中有更有效的方法吗?

另外,作为旁注,通过Visual Studio调试器运行此代码需要3分钟!我认为调试器会慢一点,但我很惊讶地看到了这么多.

UPDATE

所以这

using (var scope = new TransactionScope())
{
    connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members);

    scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)

还有这个

    connection.Execute(@"
insert Member(Username, IsActive)
values(@Username, @IsActive)", members);
Run Code Online (Sandbox Code Playgroud)

都花了20秒.

但这需要4秒!

SqlTransaction …
Run Code Online (Sandbox Code Playgroud)

performance sqlbulkcopy dapper

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

如何使用Dapper.NET将C#List插入数据库

使用,我如何插入C# List数据库.以前没有dapper我使用下面的代码将List值插入数据库.

try
{                
    connection.Open();

    for (int i = 0; i < processList.Count; i++)
    {
        string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@Id, @st_Time, @ed_Time, @td_Time)";
        command = new SqlCommand(processQuery, connection);
        command.Parameters.Add("Id", SqlDbType.Int).Value = processList[i].ID;
        command.Parameters.Add("st_Time", SqlDbType.DateTime).Value = processList[i].ST_TIME;
        command.Parameters.Add("ed_Time", SqlDbType.DateTime).Value = processList[i].ED_TIME;
        command.Parameters.Add("td_Time", SqlDbType.DateTime2).Value = processList[i].TD_TIME;
        dataReader.Close();
        dataReader = command.ExecuteReader();
    }

    connection.Close();
}
catch (SqlException ex)
{
    //--Handle Exception
}
Run Code Online (Sandbox Code Playgroud)

我熟悉使用dapper获取数据,但这是我第一次尝试使用插入查询.

我尝试了以下代码,使用Exceute链接查询但坚持循环; 我认为使用dapper工具,不需要循环语句.

connection.Execute(processQuery ... …
Run Code Online (Sandbox Code Playgroud)

c# sql-server dapper

61
推荐指数
2
解决办法
7万
查看次数

Dapper是否支持类似运营商?

使用Dapper-dot-net ...

以下结果不会导致数据对象:

var data = conn.Query(@"
    select top 25 
    Term as Label, 
    Type, 
    ID 
    from SearchTerms 
    WHERE Term like '%@T%'", 
    new { T = (string)term });
Run Code Online (Sandbox Code Playgroud)

但是,当我只使用常规字符串格式时:

string QueryString = String.Format("select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like '%{0}%'", term);
var data = conn.Query(QueryString);
Run Code Online (Sandbox Code Playgroud)

我在集合中得到25行.Dapper没有正确解析参数的结尾@T吗?

sql dapper

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

56
推荐指数
4
解决办法
1万
查看次数