将MySQL存储过程添加到Entity Framework上下文时的外键约束错误

时间:2014-09-04 17:50:49

标签: mysql entity-framework

我正在尝试使用Entity Framework 6 Database First让我的应用程序与MySQL数据库通信。

我正在尝试使用存储过程来使用Entity Framework创建,更新和删除每个实体。

对于没有外键的表,这很容易。但是,在尝试添加存储过程时出现错误(通过右键单击实体设计器表面,“从数据库更新模型...”)。

错误消息是:

  

发生了'MySql.Data.MySqlClient.MySqlException'类型的异常   在尝试从数据库更新时。异常消息是   无法添加或更新子行:外键约束失败   sakila.'film_actor',CONSTRAINT'fk_film_actor_actor'外键   ('actor id')参考'actor'('actor id)ON UPDATE CASCADE。)

我的存储过程如下所示:

DELIMITER $$

CREATE PROCEDURE `p_film_actor_ins` (
    IN paractor_id smallint(5) unsigned,
    IN parfilm_id smallint(5) unsigned,
    IN parlast_update timestamp
)
    MODIFIES SQL DATA
BEGIN

    INSERT INTO film_actor
    (
        actor_id,
        film_id,
        last_update
    )
    VALUES
    (
        paractor_id,
        parfilm_id,
        parlast_update
    );

END$$
DELIMITER ;

现在,公平地说,在执行存储过程时我会收到类似错误,而我的数据错误。但我想在这里做的就是将它导入我的模型中。

1 个答案:

答案 0 :(得分:3)

我看到你的存储过程插入了。我遇到了同样的问题。

  1. 右键单击数据库模型,然后单击数据库中的更新模型。
  2. 仅选择存在问题的存储过程。
  3. 将鼠标悬停在“将所选存储过程和函数导入实体模型”选项中,并看到它还显示“通过实体模型公开选定的商店过程,在它们返回时为它们创建返回类型多个列。如果存储过程用于插入/更新/删除实体类型,则取消选中此项“。
  4. 取消选中该框。
  5. 在Visual Studio模型浏览器中完成设置存储过程。
  6. 此时我意识到Entity Framework 6似乎不支持async stored procedures并将代码重写为原始SQL查询。