【问题标题】:Error updating EDMX file更新 EDMX 文件时出错
【发布时间】:2016-01-08 10:27:45
【问题描述】:

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

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" />

我的 package.config 条目是:

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

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

V

【问题讨论】:

  • 我遇到了同样的问题。最后,我能够通过删除一些存储过程来制造一种解决方法,直到 EF 将其导入;替换已删除的存储过程部分,然后从数据库中刷新模型。该过程的“违规”部分是完全合法的,并且适用于其他存储过程就好了:(

标签: entity-framework edmx


【解决方案1】:

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

看到这个:http://entityframework.codeplex.com/workitem/1529

如果您的程序有类似SELECT 1 的内容,您将得到“标识符为空或为空!”错误。但如果它是SELECT 1 as 'One',那么它应该可以工作。

【讨论】:

    【解决方案2】:

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

    必须有一些带有 IF EXISTS 的 SP 或对某些不存在的实体进行相关检查,例如一些 #tempTable 等。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        如果您在向 EDMX 添加存储过程时遇到错误: 尝试从数据库更新时出现 System.ArgumentException 类型的异常。异常消息是“标识符为空或为空!”。

        然后你可以在存储过程中添加只设置 FMTONLY 关闭

        BEGIN
            Set FMTONLY off;
        END
        

        【讨论】:

        • @GertArnold 先生! ,你能告诉我原因吗?
        • 我的评论是一个链接:)
        • @GertArnold 好的,谢谢 :) 但暂时它对我有用!
        猜你喜欢
        • 2012-02-28
        • 1970-01-01
        • 2018-02-17
        • 2015-03-30
        • 2018-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多