更新EDMX文件出错



我看过一些关于这个问题的帖子,但是没有一个答案对我有帮助。我正在尝试向EDMX添加一个存储过程。我打开图表,右键单击鼠标,并选择"Update Model from Database"。对于包含敏感数据,我选择"是",并取消勾选"在App.config中保存连接设置"。(这个EDMX在一个类库中,这个类库的唯一目的就是容纳这个EDMX)。我点击下一步,选择"添加"选项卡。展开"Stored Procedures and Functions",找到存储过程对应的复选框,选中"Import selected Stored Procedures and Functions into the entity model",单击"Finish"。我收到的错误是:

An exception of type 'System.ArgumentException' occurred while attempting to update from the database. The exception message is 'Identifier is null or empty!".

保存图表。我在整个解决方案中搜索我的进程的名称,它只存在于试图调用它的代码中——在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" />

我的包。配置项为:

<package id="EntityFramework" version="6.1.3" targetFramework="net45" />

有人知道这里出了什么问题吗?

V

问题可能是您的过程执行select时没有命名所有列。

参见:http://entityframework.codeplex.com/workitem/1529

如果你的过程有类似SELECT 1的东西,你会得到"Identifier is null or empty!"错误。但如果它是SELECT 1 as 'One',那么它应该工作

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

必须有一些具有IF EXISTS或相关检查的SP来检查一些不存在的实体,例如一些#tempTable等

确保EF的所有对象都是可用的,即使是NULL值,然后执行它将工作。

对我来说,它是造成所有麻烦的200多个sp中的一个。

尽量不要对#user或##global临时表使用存储过程。如果无法转义,请尝试使用输出参数或显式返回0。

我遇到了同样的问题,在缩小导致问题的进程范围后,我意识到我的失败过程中有一些嵌套过程。我注释掉了嵌套过程,更新了模型,然后再取消注释。

这不是一个永久的解决方案,但它'在紧要关头'。

如果在向EDMX添加存储过程时出现错误:当试图从数据库更新时,发生了System.ArgumentException类型的异常。异常消息为"Identifier is null or empty!"。

可以在存储过程中添加set FMTONLY off

BEGIN
    Set FMTONLY off;
END

最新更新