实体框架-mysql存储过程
本文关键字:存储过程 -mysql 框架 实体 | 更新日期: 2023-09-27 17:59:02
我使用以下代码将存储过程映射到我的模型:
modelBuilder.Entity<Account>()
.MapToStoredProcedures(p => p.Insert(sp => sp.HasName("sp_InsertAccount"))
.Update(sp => sp.HasName("sp_UpdateAccount"))
.Delete(sp => sp.HasName("sp_DeleteAccount"))
);
但是当我使用添加记录时
bank.AccountsMoves.Add(entity);
它抛出错误:
类型为的未处理异常"System.Data.Entity.Infrastructure.DbUpdateConcurrentException"在EntityFramework.dll 中发生
附加信息:存储更新、插入或删除语句影响了意外的行数(0)。实体可能自加载实体以来已修改或删除。看见http://go.microsoft.com/fwlink/?LinkId=472540有关的信息理解和处理乐观并发异常。
存储过程的sql语句是:
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_InsertAccountMove`(
IN type int(11),
IN account_id int(11),
IN accountant_id int(11),
IN amount int(11),
IN date datetime
)
BEGIN
INSERT INTO `bank`.`accounts_moves`
(`type`, `account_id`, `accountant_id`, `amount`, `date`)
VALUES (type, account_id,
(SELECT id FROM accountant
Where name = SUBSTRING_INDEX(USER() ,'@',1))
, amount, NOW());
END
我认为mysql存储过程没有返回受影响的行数
我使用的是EF 6.0,mysql 5.7
有人知道如何以正确的方式修复这个错误吗?
我解决了这个问题将以下行添加到存储过程的最后一行:
SELECT * FROM `bank`.`accounts_moves` WHERE id = LAST_INSERT_ID();