[英]C# Dapper get last insert id returns null MySQL
I have two tables Partners
and Partner_Address
, I want to store partner addresses in another database.我有两个表
Partners
和Partner_Address
,我想将合作伙伴地址存储在另一个数据库中。 For that I use Transaction
in Dapper
.为此,我在
Dapper
使用Transaction
。
After executing the query to insert new partner
I try to get last insert id and then to pass that ID to address object, but all time I get 0
.执行查询以插入新
partner
我尝试获取最后一个插入 id,然后将该 ID 传递给 address 对象,但每次我都得到0
。 Partner Record was successfully inserted but last insert id is 0
.合作伙伴记录已成功插入,但最后插入的 id 为
0
。
Tables:表格:
// Partner Address entity
public class AdreseKorisnika
{
public int id { get; set; }
public int partnerId { get; set; } // partnerID
public int adresaId { get; set; } // addressID
public string broj { get; set; } // number
public int status { get; set; }
public int primarna { get; set; } // primary
}
public class Partner
{
public int id { get; set; }
public string naziv { get; set; } // name
public string telefon { get; set; } // phone
public string email { get; set; }
/// etc...
What I try:我的尝试:
public int InsertWithAdresses(Partner partner, AdreseKorisnika adreseKorisnika)
{
using (Conn)
{
string partnerQuery = @"INSERT INTO Partner(naziv, pib, maticni_br, telefon, email, web_sajt, status, created)
VALUES(@naziv, @pib, @maticni_br, @telefon, @email,@web_sajt, @status, @created);";
string addressQuery = @"INSERT INTO Adrese_Korisnika(partnerId, adresaId, broj, status, primarna)
VALUES(@partnerId, @adresaId, @broj, @status, @primarna);";
int affectedRows = 0;
using (var transaction = Conn.BeginTransaction())
{
affectedRows = Conn.Execute(partnerQuery, partner, transaction: transaction);
int id = Conn.Query<int>("SELECT LAST_INSERT_ID();").First();
var addrs = Conn.ExecuteScalar<int>(addressQuery,
new
{
partnerId = id, // <-- here I try to pass last insert id from partnerQuery but it is always 0
adresaId = adreseKorisnika.adresaId,
broj = adreseKorisnika.broj,
status = adreseKorisnika.status,
primarna = adreseKorisnika.primarna
},
transaction: transaction);
transaction.Commit();
}
return affectedRows;
}
}
I want my Partners
to have one ore more addresses in another table.我希望我的
Partners
在另一个表中有一个或多个地址。 I also tried this: Dapper MySQL return value我也试过这个: Dapper MySQL return value
DEBUG调试
I solved the problem like this:我解决了这样的问题:
public int InsertWithAdresses(Partner partner, AdreseKorisnika adreseKorisnika)
{
using (Conn)
{
string lastInsertID = @"
INSERT INTO Partner(naziv, pib, maticni_br, telefon, email, web_sajt, status, created)
VALUES(@naziv, @pib, @maticni_br, @telefon, @email,@web_sajt, @status, @created);
INSERT INTO Adrese_Korisnika(partnerId, adresaId, broj)
VALUES(LAST_INSERT_ID(), @adresaId, @broj);
SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER);";
using (var transaction = Conn.BeginTransaction())
{
var affectedRows = Conn.Query<int>(lastInsertID,
new
{
naziv = partner.naziv,
pib = partner.pib,
maticni_br = partner.maticni_br,
telefon = partner.telefon,
email = partner.email,
web_sajt = partner.web_sajt,
status = partner.status,
created = partner.created,
adresaId = adreseKorisnika.adresaId,
broj = adreseKorisnika.broj,
},
transaction: transaction);
return 1;
};
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.