实体框架-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

有人知道如何以正确的方式修复这个错误吗?

实体框架-mysql存储过程

我解决了这个问题将以下行添加到存储过程的最后一行:

SELECT * FROM `bank`.`accounts_moves` WHERE id = LAST_INSERT_ID();