dapper如何多次执行相同的命令?正如我在下面所写的,插入sql,并使用list参数调用Dapper的execute方法,所以我将插入3个对象。
问题: dapper是进行3次往返Sql Server来执行3次插入,还是将其作为1次往返来调用3次插入?
我只是想知道,像这样使用它是否有任何优势,而不是只是预先和调用一个插入一个或如果它只是相同的。
Version 1.
var sqlInsert = $"INSERT INTO Book (Id, Title) Values (@Id, @Title)";
var parameters = new List<Book&
我的C#数据结构如下所示:
public class Invoice
{
public string InvoiceNumber {get;set;}
public List<SalesPerson> SalesPersons {get;set;}
}
public class SalesPerson
{
public string Name {get;set;}
}
这对应于两个表:发票和SalesPerson。发票可以有任何数量的这些协会。
现在,我正在创建一个批量上传工具,接收一个CSV并创建一个发票集合(每个发票都有一些相关的SalesPerson
给出一个简单的测试:
使用Dapper:
for (int i = 0; i < 10000; i++)
{
Connection.Execute("UPDATE User SET Name = 'Max'");
}
此操作的持续时间如下所示,用StopWatch度量
RunTime 00:00:37.51持续时间: 00:00:37.5150734
使用Dapper的:
User user = new User();
user.Name = "Max";
DapperPlusManager.Entity<User
我的应用程序是实体模型,如下所示,并使用Dapper
public class Goal
{
public string Text { get; set; }
public List<SubGoal> SubGoals { get; set; }
}
public class SubGoal
{
public string Text { get; set; }
public List<Practise> Practices { get; set; }
public List<Measure> Measures { g
假设我的实体是
public class AppUser
{
string Id { get; set; }
string Name { get; set; }
}
默认情况下,Dapper Dommel看起来不会插入Id字段。它将生成与以下内容非常接近的SQL:
insert into AppUser (Name) values ("Dapper") select cast(scope_identity() as int)
此SQL是使用Dapper Dommel插入函数生成的,如下所示:
using (var connection = new System.
我刚刚开始使用Dapper.Contrib来帮助我进行插入和获取,但是由于我的枚举是以字符串的形式存储在数据库中(出于几个原因),所以我在使用插入时遇到了麻烦。Dapper在读取时无缝地使用字符串枚举,但插入总是将序数值放入数据库中。
我读了很多关于Dapper的建议,有相当多的问题打开了,但没有找到一个有效的解决方案。我的简化类如下所示:
public class Person {
public long Id { get; set; }
public string Name { get; set; }
public Gender Gender { get; set; }
}
我是Dapper的新手,我试图编写一些代码来测试Dapper.Contrib。
[Dapper.Contrib.Extensions.Table("Cat")]
public class Cat
{
[Dapper.Contrib.Extensions.Key]
public string catid {get;set;}
public string catName {get;set;}
}
...
Cat cat = new Cat(){catid="somecharmaybe", catName="testcat"}
我使用dapper.rainbow将一条记录插入到MSSQL数据库中。以下是我的代码
int? id = db.RoomTypes.Insert(roomType)
当我运行我的应用程序时,我得到了下面的异常。
Cannot insert explicit value for identity column in table 'RoomTypes'
when IDENTITY_INSERT is set to OFF.
我认为dapper.rainbow在插入期间使用了我的Identity列的值(int的默认值)。这就是导致这个异常的原因。表RoomTypes的identi
我很高兴:
//在peta poco中插入记录
var a = new Article();
a.title="My new article";
a.content="PetaPoco was here";
a.date_created=DateTime.UtcNow;
db.Insert(a);
我是分心的:
//用dapper插入记录
var a = new Article();
a.title="My new article";
a.content="PetaPoco was here";
a.date_created=Da
我使用.net作为后端,使用Server作为数据库。我以两种方式将记录插入到数据库中,第一种方法是使用crud操作,第二种方法是使用SQL Server存储过程(称为dapper )。
使用Dapper时,将自动裁剪长字符串,但在使用crud操作时,插入失败,出现以下错误:
字符串或二进制数据将被截断。
我只想知道Dapper是否自己负责修剪这些字符串。
以下是代码:
int result = await unitOfWork.GetService<IUserService>().AddUserAsync(userModel); // here I get an error
在阅读了之后,我决定仔细看看我使用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(@"
基于Dapper的github页面上的代码,我创建了一个bulk insert语句。
Dapper将查询拆分为多个单独的split语句(如SQL分析器中所示)。
是否可以指示它将多个操作转换为单个操作,以减少DB trips的数量,而不必手动创建以下多个insert语句?
insert into test (a,b) values (b,c);
insert into test (a,b) values (d,e);
insert into test (a,b) values (f,g);
我正在使用Microsoft Access的Dapper (我向你保证,这不是我的选择),我也在使用Dapper.Contrib扩展来允许我做connection.Insert(address)。不幸的是,这抛出了一个错误'Characters found after end of SQL statement.',因为,我假设,SQL dapper生成的是执行插入,然后请求SCOPE_IDENTITY,而Access不喜欢由;分隔的多个SQL语句。
有没有办法告诉Dapper不要尝试返回标识值?
我看了一眼,看起来我可能不走运?
我想在我的数据访问层中创建一个函数,该函数将遍历联系人列表,并根据联系人是新的还是现有的进行插入或更新。
我知道使用Dapper,只需创建一条insert语句并将其传递给一个对象列表,就可以进行批量插入。是否可以使用批量更新来执行相同的操作?或者更好的是批量InsertOrUpdate。
这是我的解决方案,有没有更好的方法?我真的不想为列表中的每个联系人调用一次execute函数。
StringBuilder insertSql = new StringBuilder();
insertSql.AppendLine("INSERT INTO Contact (FirstName, La
我有一个SQL Server表,其中将使用以下方法插入行:
var sql = @"
DECLARE @InsertedRows AS TABLE (Id BIGINT);
INSERT INTO Person ([Name], [Age]) OUTPUT Inserted.Id INTO @InsertedRows
VALUES (@Name, @Age);
SELECT Id FROM @InsertedRows;";
Person person = ...;
var id = connection.Query<long>(sql, person).Firs
当我执行以下代码时,我得到了一个NullReferenceException:
var insertTransaction = @"INSERT INTO [192.168.1.55].databaseName.dbo.tableName
(Date, Desc)
VALUES(GETDATE(),
@Description)
SELECT Scope_identity()";
var result = _sqlMapper.Query<int>(insertTransaction,
new
{
我使用的是Dapper.Contrib v1.50.0和DapperV1.50.2。我在类中使用Key注释了key属性,数据库中的列是Identity。当我尝试插入时,Sql Server抛出一个错误,该值无法插入到标识列中。Dapper.Contrib是否支持插入到使用标识列的表中?
public class Product {
[Key]
public int ProductId {get; set;}
public string BrandCode { get; set; }
public bool TwoDScanRequ
如果我有课:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
我尝试使用Dapper/DapperExtensions将其插入到相应的MySQL表中:
var person = new Person { Id = 10, Name = "Bobby" };
connection.Insert(person);
假设MySQL中的Id列设置为AUTO_INCREMENT,且表为空。然后在此过程中的某个地方,将Id值10更改为1。
是否可以使用D
我正在使用Dapper ()在asp.net核心myweb项目。我需要创建主记录并将一组行插入子表中。
Ex. OrdersMaster table
create an order id in this table
OrderDetails table
ordermasterid
order items
我怎么能用Dapper做这件事?如果可能的话,请分享一些代码片段。
不确定这是Npgsql或Dapper中的错误,还是我做错了。
我尝试插入一个记录数组,并返回插入的行以获取插入的ids。记录将作为Postgres数组参数传递
c#类
public class test
{
public int id { get; set; }
public string name { get; set; }
}
它映射到下表
// id is PK sequence
create table test (
id int,
name text
)
下面是插入代码
var sql = @"
with t as (
insert i
我是达珀的新生儿。尝试将CRUD操作与Dapper和Dapper.SimpleCRUD库结合起来。这是样本代码..。
我的数据模型看起来
Class Product
{
public string prodId {get;set;}
public string prodName {get;set;}
public string Location {get;set;}
}
Dapper实现-插入
public void Insert(Product item)
{
using(var con = GetConnection())
{
con.Insert(
我有一个表,它有一个主键,由两个列组成,这两个列都不是自动递增的,我的Dapper insert ( Dapper扩展的一部分)在插入时失败了,说明两个列中的第一个不允许null,即使我传递的值不是null。
表Student
StudentId (PK, not null) \_ (combined to form primary key)
StudentName (PK, not null) /
Active -- just another column
C#:
public class Student {
public int Studen
我有以下场景(删除异常处理,简化代码):
SqlDataReader rdr = executeQuery(query);
while (rdr.Read()) {
//There are thousands of records, so this happens thousands of times
handleRecord(rdr); //Takes a couple of seconds
}
rdr.Close();
因此,查询所涉及的表(在拥挤不堪的Sql Server 2000上运行)具有几个小时或更长时间的共享锁,具体取决于记录数。
这些锁有时会影响查询此数据库的其他应
我正在工作的.NET应用程序中,用户选择一些过滤器,如日期,id等。
我需要做的是使用这些过滤器查询SQL Server数据库表,并将它们转储到MySQL表中。我不需要表中的所有字段,只需要几个字段。
到目前为止,我需要遍历SQL Server数据集中的所有记录,并将它们逐个插入到我的MySQL表中。
有没有实现更好性能的方法?我一直在玩Dapper,但我想不出一种方法来做这样的事情:
Insert into MySQLTable (a,b,c)
Select a,b,c from SQLServerTable
where a=X and b=C
有什么想法吗?
链接服务器选项是不可能的,因为