Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
Entity framework 更新EDMX文件时出错_Entity Framework_Edmx - Fatal编程技术网

Entity framework 更新EDMX文件时出错

Entity framework 更新EDMX文件时出错,entity-framework,edmx,Entity Framework,Edmx,我看过其他一些关于这方面的帖子,但似乎没有一个答案有用。我正在尝试将存储过程添加到EDMX。我打开图表,右键单击,然后选择从数据库更新模型。我选择“是”以包含敏感数据,并取消选中App.config中的“保存连接设置”。此EDMX位于类库中,类库的唯一用途是容纳此EDMX。单击“下一步”,然后选择“添加”选项卡。我展开存储过程和函数,然后查找并单击我的存储过程的复选框。我只选中将选定的存储过程和函数导入实体模型,然后单击Finish。我收到的错误是: An exception of type '

我看过其他一些关于这方面的帖子,但似乎没有一个答案有用。我正在尝试将存储过程添加到EDMX。我打开图表,右键单击,然后选择从数据库更新模型。我选择“是”以包含敏感数据,并取消选中App.config中的“保存连接设置”。此EDMX位于类库中,类库的唯一用途是容纳此EDMX。单击“下一步”,然后选择“添加”选项卡。我展开存储过程和函数,然后查找并单击我的存储过程的复选框。我只选中将选定的存储过程和函数导入实体模型,然后单击Finish。我收到的错误是:

An exception of type 'System.ArgumentException' occurred while attempting to update from the database. The exception message is 'Identifier is null or empty!".
我保存图表。我在整个解决方案中搜索proc的名称,它只存在于试图调用它的代码中——EDMX中没有实例

存储的过程定义如下所示:

ALTER Procedure [dbo].[spGetCountableResult]
    @PatientId BIGINT
AS 
<add name="DB_Entities" connectionString="metadata=res://*/Models.DBContext.csdl|res://*/Models.DBContext.ssdl|res://*/Models.DBContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=DB.com;initial catalog=MyDb;user id=MyUser;password=MyPassword;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
我的连接字符串如下所示:

ALTER Procedure [dbo].[spGetCountableResult]
    @PatientId BIGINT
AS 
<add name="DB_Entities" connectionString="metadata=res://*/Models.DBContext.csdl|res://*/Models.DBContext.ssdl|res://*/Models.DBContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=DB.com;initial catalog=MyDb;user id=MyUser;password=MyPassword;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
我的package.config条目是:

<package id="EntityFramework" version="6.1.3" targetFramework="net45" />
有人知道这里出了什么问题吗


V

问题可能是您的过程执行SELECT而没有命名所有列

见此:


如果您的过程有类似SELECT1的内容,您将得到标识符为null或空!错误但是如果选择1作为“一”,那么它应该可以工作。

在等待数小时后,我找到了解决方案

必须有一些SP(如果存在)或对某些实体的相关检查(如果不存在),例如一些诱人的实体等

确保所有对象都可用于EF,即使有空值,然后执行它将起作用


对我来说,这是200多个SP中的一个造成了所有问题。

如果在向EDMX添加存储过程时出错: 尝试从数据库更新时发生System.ArgumentException类型的异常。异常消息为标识符为null或为空

然后,您可以在存储过程中添加刚设置FMTONLY off

BEGIN
    Set FMTONLY off;
END

尽量不要将存储过程用于用户或全局临时表。如果无法转义,请尝试使用输出参数或返回显式0

我也有同样的问题。最后,我能够通过删除一些存储过程来制造一个变通方法,直到EF将其导入;替换存储过程中已删除的部分,然后从数据库中刷新模型。该过程中“冒犯”的部分是完全合法的,并且适用于其他存储过程:很好。@GertArnold Sir,你能告诉我原因吗?我的评论是一个链接:@GertArnold好的,谢谢:但它对我起了作用!