Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 从LINQ调用存储过程(使用dbcontext)_C#_Entity Framework_Sql Server 2008_Asp.net Mvc 3_Entity Framework 4.1 - Fatal编程技术网

C# 从LINQ调用存储过程(使用dbcontext)

C# 从LINQ调用存储过程(使用dbcontext),c#,entity-framework,sql-server-2008,asp.net-mvc-3,entity-framework-4.1,C#,Entity Framework,Sql Server 2008,Asp.net Mvc 3,Entity Framework 4.1,大家好 有了EF4,我可以使用这样一个小片段将EDMX函数(使用“从数据库更新模型”并从列表中添加存储过程)映射到linq方法 [EdmFunction("MYPROJECT.Store", "Foo")] public Decimal Foo(Int32 Id) { throw new NotSupportedException("Not direct access possible, use with E-SQL or LINQ"); } 但这似乎不适用于EF4.1 我发现存储过程

大家好 有了EF4,我可以使用这样一个小片段将EDMX函数(使用“从数据库更新模型”并从列表中添加存储过程)映射到linq方法

[EdmFunction("MYPROJECT.Store", "Foo")]
public Decimal Foo(Int32 Id)
{
    throw new NotSupportedException("Not direct access possible, use with E-SQL or LINQ");
}
但这似乎不适用于EF4.1

我发现存储过程并不首先与代码一起工作。 我使用的是DbContext,我不能这样做是正常的吗

如果是,如何使存储过程正常工作


提前感谢:-)

这是唯一与EDMX相关的功能,如果没有EDMX,您不能首先将其与DbContext API代码/fluent API一起使用。顺便说一句,您指的是SQL函数而不是存储过程,因为导入的存储过程会导致函数导入,并且不能在Linq查询中调用。用
edmfonment
标记的方法表示导入的SQL函数和模型定义的函数

是的,我知道,SQL函数出现在导入向导的存储过程分支下,但这只是EDMX设计器的“功能”


因为您首先将数据库与DbContext API和EDMX文件一起使用,所以应该能够毫无问题地使用
EdmFunction
。我刚测试过。问题可能是标记有
EdmFunction
属性的代理方法不是静态的-它必须是静态的。

先使用数据库或先使用模型的方法。不幸的是,这似乎是目前唯一的选择:-(这个问题可能很愚蠢,但是,我从数据库创建了edmx,并添加了dbcontext代码生成。我是数据库第一,对吗?是的,但是
dbcontext
是代码第一的东西-所以你似乎有一个奇怪的混合数据库第一和代码第一…谢谢你的回答。我试图用相同的结构创建一个新项目:一个edmx文件(使用sql server db中的表udf函数进行了更新)、dbcontext和一个用udf名称声明为静态的代理方法。当我从linq调用此方法时,这就是被调用的代理方法(我遇到了一个异常)。如果您尝试并成功解决了我的问题,您能给我一个代码片段吗?提前感谢:)您遇到了什么异常?您也尝试了ObjectContext API的相同函数吗?我的工作笔记本电脑上没有代码。我得到了一个:抛出新的NotSupportedException(“不可能直接访问,与E-SQL或LINQ一起使用”);只是为了测试,我删除了EdmFunction行,所有像这样的工作都可以做任何事情。是的,我尝试了objectcontext,所有工作都很好。在这种情况下,您不是在linq中调用实体的方法,而是在linq中调用对象的方法。确定这必须抛出exeption,因为它不是linq查询。这必须在
objectcontext 同样,方法不是静态的,并且在linq查询中不作为函数使用。EDM函数不是存储过程,函数必须是完整linq查询的一部分。