我整个上午一直在搞乱这个,但我找不到答案.我试图使用EF来引用存储过程,但无论我尝试什么,我都无法在模型浏览器中显示它.
我已经使用以下步骤尝试将过程放入模态中:
>将过程添加到实体模型
>右键单击模型并选择添加新 – >功能导入
>给它起个名字,然后选择我的程序
>生成一个新的复杂集合(我也试过使用一个实体,既不工作)
>单击“确定”
我已经多次这样做了,我可以在模型中的“函数Imports”文件夹中看到该函数,但它从未出现在模型中,所以我无法引用它.
我发现我可以通过执行以下操作直接引用存储过程(不带导入):
DBEntities db = new DBEntities(); var test = db.gsp_GetGroups();
但是,我无法将其转换为IQueryable< T>没有大的解决方法.
有没有人知道我缺少哪些步骤才能正确添加?
谢谢
附: VS 2012,asp.net 4.0
解决方法
验证您用于生成EF模型的sql登录是否有权执行您尝试导入的存储过程.
>转到App.config并查找connectionStrings条目(通常位于底部).如果您有多个连接字符串,那么您想要的是您的上下文使用的字符串.
>转到edmx文件并深入查找实体类.
>例如,如果您有MyDbModel.edmx,那么您将拥有MyDbModel.Context.tt,而MyDbModel.Context.tt又包含MyDbModel.Context.cs.
>在MyDbModel.Context.cs文件中,您将拥有一个继承自DbContext的类,构造函数将调用base(“name =< your connection string name>”)
><您的连接字符串名称>是你在app.config中寻找的那个.
>您的连接字符串显示用户(集成安全性将表示已登录的AD用户.这仅在使用您的程序的每个人都具有正确的数据库访问权限时才有效.这在生产环境中可能是一个冒险的假设)>转到sql Management Studio并将此存储过程添加到用户的“Securables”