Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架-mysql存储过程_C#_Mysql_Entity Framework_Stored Procedures - Fatal编程技术网

C# 实体框架-mysql存储过程

C# 实体框架-mysql存储过程,c#,mysql,entity-framework,stored-procedures,C#,Mysql,Entity Framework,Stored Procedures,我使用以下代码将存储过程映射到我的模型: modelBuilder.Entity<Account>() .MapToStoredProcedures(p => p.Insert(sp => sp.HasName("sp_InsertAccount")) .Update(sp => sp.HasName("sp_UpdateAccount")) .Delete(sp => sp.HasNam

我使用以下代码将存储过程映射到我的模型:

modelBuilder.Entity<Account>()
            .MapToStoredProcedures(p => p.Insert(sp => sp.HasName("sp_InsertAccount"))
            .Update(sp => sp.HasName("sp_UpdateAccount"))
            .Delete(sp => sp.HasName("sp_DeleteAccount"))
            );
它抛出错误:

类型的未处理异常 'System.Data.Entity.Infrastructure.DbUpdateConcurrencyException' 发生在EntityFramework.dll中

附加信息:存储更新、插入或删除语句 受影响的行数意外(0)。实体可能已经 自加载实体后已修改或删除。看见 有关 理解和处理乐观并发异常

存储过程的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存储过程不会返回受影响的行数

我使用的是EF6.0,mysql 5.7

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

我解决了这个问题 添加到存储过程的最后一行,如下所示:

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

如果只调用存储过程,为什么还要使用实体框架呢?也许你应该考虑一些比较轻的东西。Dapper@DavidL这是一种将正常CUD语句重定向到的方法。读取将由常规LINQ语句完成。我不熟悉Mysql语法,但存储过程应该返回新插入行的生成键值(如果有任何生成的键值)。和计算字段的值(如果有)。是的,存储过程应该返回插入的行数,但它不支持,我认为mysql不支持它。我是否应该捕获异常?返回插入行数-您没有阅读我写的内容。我认为只选择id就足够了。
SELECT * FROM `bank`.`accounts_moves` WHERE id = LAST_INSERT_ID();