asp.net-mvc - EF 映射对象的不兼容数据读取器异常

标签 asp.net-mvc entity-framework model mapping

我正在使用 Entity Framework 并更新了表及其存储过程,但在调用存储过程时出现以下错误。

The data reader is incompatible with the specified 'FormValueModel.Valuation'. A member of the type, 'ValuationId', does not have a corresponding column in the data reader with the same name.

ValuationId 是我的主键,我想自动递增。

我可以从 SQL Management Studio 执行存储过程 find,当我运行我的应用程序时,它会写入数据库,但随后会出现错误消息。

我不熟悉 Entity Framework ,只有基础知识,我认为这可能是 model.edmx 的映射问题。

在模型中重新创建和映射表和存储过程的正确过程是什么?

<小时/>

存储过程。

    ALTER PROCEDURE [dbo].[ValuationCreate]
    @TrackingNumber varchar(100),
    @FormMobiValuationId varchar(100),
    @ValuationPropertyId int,
    @ValuationFileName varchar(50)

AS   

SET NOCOUNT ON
SET XACT_ABORT ON


DECLARE @ErrorMessage varchar(1000)



BEGIN TRANSACTION


    --Insert to Valuation
    INSERT INTO [Valuation]
    (
        TrackingNumber,
        FormMobiValuationId,
        ValuationPropertyId, -- new
        ValuationFileName,
        Date,
        ValuationStatus,
        IsActive
    )
    VALUES
    (
        @TrackingNumber,
        @FormMobiValuationId,
        @ValuationPropertyId,--new
        @ValuationFileName,
        GETDATE(),
        1, --Created
        1
    )





IF @@ERROR > 0
BEGIN
    SET @ErrorMessage = 'Valuation Insert failed'
    GOTO ErrorHandler
END
ELSE
BEGIN
    COMMIT TRANSACTION
    RETURN
END



ErrorHandler:

RAISERROR(@ErrorMessage,16,1);
ROLLBACK TRANSACTION
RETURN -1
<小时/>

发生错误的C#调用,错误消息出现在最后一行。

 public ObjectResult<Valuation> ValuationCreate(global::System.String trackingNumber, global::System.String formMobiValuationId, Nullable<global::System.Int32> valuationPropertyId, global::System.String valuationFileName)
        {
            ObjectParameter trackingNumberParameter;
            if (trackingNumber != null)
            {
                trackingNumberParameter = new ObjectParameter("TrackingNumber", trackingNumber);
            }
            else
            {
                trackingNumberParameter = new ObjectParameter("TrackingNumber", typeof(global::System.String));
            }

            ObjectParameter formMobiValuationIdParameter;
            if (formMobiValuationId != null)
            {
                formMobiValuationIdParameter = new ObjectParameter("FormMobiValuationId", formMobiValuationId);
            }
            else
            {
                formMobiValuationIdParameter = new ObjectParameter("FormMobiValuationId", typeof(global::System.String));
            }

            ObjectParameter valuationPropertyIdParameter;
            if (valuationPropertyId.HasValue)
            {
                valuationPropertyIdParameter = new ObjectParameter("ValuationPropertyId", valuationPropertyId);
            }
            else
            {
                valuationPropertyIdParameter = new ObjectParameter("ValuationPropertyId", typeof(global::System.Int32));
            }

            ObjectParameter valuationFileNameParameter;
            if (valuationFileName != null)
            {
                valuationFileNameParameter = new ObjectParameter("ValuationFileName", valuationFileName);
            }
            else
            {
                valuationFileNameParameter = new ObjectParameter("ValuationFileName", typeof(global::System.String));
            }

            return base.ExecuteFunction<Valuation>("ValuationCreate", trackingNumberParameter, formMobiValuationIdParameter, valuationPropertyIdParameter, valuationFileNameParameter);
        }

最佳答案

该消息表示存储过程的结果不包含名为 ValudationId 的列。仔细检查您的 select 语句并在 SSMS 中运行它,以确保您恢复该列。

编辑:您的过程不包含select语句。您需要选择插入的标识值(例如,使用 scope_identity() 函数),以便 EF 可以将其映射回实体。

例如,

insert into Table
(
    Col1,
    Col2
)
values
(
    1,
    2
)

select scope_identity() as IdentityColName

此外,顺便说一句,您不需要插入语句中的所有事务业务;您只有一个修改数据的语句(您的插入)。

关于asp.net-mvc - EF 映射对象的不兼容数据读取器异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14235783/

相关文章:

javascript - 为什么 jQuery Ajax 在 Post 之前发送 Get 请求?

c++ - 获取显卡型号?

model - 无法覆盖 Magento 中的核心模型

javascript - 如何使用 Angular 2 在 POST 上启用 ASP.NET MVC 4 中的跨源请求

javascript - Jqueryui图像引用没有错误但图像不显示

c# - Entity Framework - 查询精度

c# - 是否可以在 linq to Entity Framework 中选择一个字符串?

java - 从 XMI 文件加载 EMF 模型实例

c# - 如何有效地测试 Action 是否装饰有属性(AuthorizeAttribute)?

c# - 如何删除级联底部的实体 -> EF中的非级联删除链?