Lim*_*mey 8 asp.net stored-procedures entity-framework
我整个上午一直在搞乱这个,但我找不到答案.我试图使用EF来引用存储过程,但无论我尝试什么,我都无法在模型浏览器中显示它.
我已经使用以下步骤尝试将过程放入模态中:
将过程添加到实体模型
右键单击模型,然后选择添加新 - >功能导入
给它一个名字,然后选择我的程序
生成一个新的复杂集合(我也试过使用一个实体,既不工作)
单击确定
我已经多次这样做了,我可以在模型中的"函数Imports"文件夹中看到该函数,但它从未出现在模型中,所以我无法引用它.
我发现我可以通过执行以下操作直接引用存储过程(不带导入):
DBEntities db = new DBEntities();
var test = db.gsp_GetGroups();
Run Code Online (Sandbox Code Playgroud)
但是,如果IQueryable<T>没有大的解决方法,我无法将其转换为.
有没有人知道我缺少哪些步骤才能正确添加?
谢谢
PS VS 2012,asp.net 4.0
验证您用于生成EF模型的SQL登录是否有权执行您尝试导入的存储过程.
connectionStrings条目(通常在底部).如果您有多个连接字符串,那么您想要的是您的上下文使用的字符串.
MyDbModel.edmx,那么你将拥有MyDbModel.Context.tt反过来包含的东西MyDbModel.Context.cs.MyDbModel.Context.cs文件中,您将拥有一个继承自的类,DbContext构造函数将调用该类base("name=<your connection string name>")<your connection string name> 是你在app.config中寻找的那个.转到Sql Server Management Studio中的SP,右键单击属性,转到权限Set public to Execute.
以上都可能是权限问题的答案,上面的答案让我看看为什么并得出结论.
这可能是因为实体框架正在使用无权执行存储过程的用户 ID 登录到数据库。
要了解:
在 .NET 项目上的 app.config 或 web.config 文件中,检查哪个user id正在访问数据库。后,您会看到它connectionString只是后user id=。
如果它与您用于编写存储过程(即在 SQL 中)的用户 ID 不同,请与您的数据库管理员核对以查看您的 .NET(以及因此 Entity Framework)中的该用户 ID 是否有权执行存储过程。
@Limey你的问题可能是由Access你的导入函数的级别引起的。尝试这个:
在Model Browser找到文件夹Function Inports. 现在右键单击您的函数并选择Properties。在属性窗口中,第一个选项应将Access其更改为Public并保存 model.edmx。
返回您的代码,看看这是否有效。
| 归档时间: |
|
| 查看次数: |
19872 次 |
| 最近记录: |