使用具有MySQL DB的实体框架和模型设计器不会拾取存储的proc参数

Gle*_*ven 5 c# mysql entity-framework

我有最新的Mysql连接器,允许您使用Visual Studio Entity Framework设计器.它工作得很好,但我刚添加了一个存储过程.

服务器资源管理器使用指定的参数将其加载完好,但随后我将其添加到实体模型中,并且它生成的代码没有任何输入参数.

这是存储过程

CREATE PROCEDURE `GetViewableMenuNodes`(IN siteId INT, IN parentId INT, IN userName varchar(255))
BEGIN
    select m.*
    from menunode m 
    where m.siteid = siteId
    and m.showinmenu = 1
    and m.parentid = parentId
    and m.viewername = userName;
END
Run Code Online (Sandbox Code Playgroud)

这是模型生成的代码

public global::System.Data.Objects.ObjectResult<MenuNode> GetViewableMenuNodes()
{
    return base.ExecuteFunction<MenuNode>("GetViewableMenuNodes");
}
Run Code Online (Sandbox Code Playgroud)

小智 6

如果您发现这有用,这里是我用于从MySQL Connector/.NET Entity Framework提供程序处理带有MySQL参数的存储过程的方法.我调用ExecuteStoreQuery().这使我不必处理模型中参数映射过程的挑战.这符合我们的需求.

    public IList<SearchResultsMember> SearchMembers(int memberID, string countryCode, string regionCode, string cityCode, float distanceKm,
        int genderID, int ageMin, int ageMax, int offsetRowIndex, int maxRows)
    {


        MySqlParameter[] queryParams = new MySqlParameter[] { 
                                        new MySqlParameter("memberIDParam", memberID),
                                        new MySqlParameter("countryCodeParam", countryCode),
                                        new MySqlParameter("regionCodeParam", regionCode),
                                        new MySqlParameter("cityCodeParam", cityCode),
                                        new MySqlParameter("distanceKmParam", distanceKm),
                                        new MySqlParameter("genderIDParam", genderID),
                                        new MySqlParameter("ageMinParam", ageMin),
                                        new MySqlParameter("ageMaxParam", ageMax),
                                        new MySqlParameter("offsetRowIndexParam", offsetRowIndex),
                                        new MySqlParameter("maxRowsParam", maxRows)
                                    };

        StringBuilder sb = new StringBuilder();
        sb.Append("CALL search_members(@memberIDParam, @countryCodeParam, @regionCodeParam, @cityCodeParam, @distanceKmParam, @genderIDParam, @ageMinParam, @ageMaxParam, @offsetRowIndexParam, @maxRowsParam)");

        string commandText = sb.ToString();
        var results = _context.ExecuteStoreQuery<SearchResultsMember>(commandText, queryParams);

        return results.ToList();
    }
Run Code Online (Sandbox Code Playgroud)

  • 当我在 MySql 中使用 EF 时,`ExecuteStoreQuery` 不存在,你有什么版本的 EF? (2认同)

小智 3

查看此错误条目:

http://bugs.mysql.com/bug.php?id=44985

对不起你的运气。欢迎来到俱乐部。显然,MySQL 连接器/.NET 实体框架无法对 MySQL 中的存储过程提供适当的支持。从线程中的日期可以看出,引入该功能的响应速度非常慢。