asp.Net   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – EF映射对象不兼容的数据读取器异常大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用实体框架工作,并更新了一个表及其存储过程,但是当调用存储过程时,我收到以下错误。

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

我可以从SQL管理工作室执行存储过程查找,当我运行我的应用程序时,它会写入数据库,然后出现错误消息

我不熟悉实体框架工作,只是具有基础知识,我认为这可能是来自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的列。仔细检查您的选择语句并在SSMS中运行它,以确保您将该列返回。

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

例如,

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

SELEct scope_identity() as IdentityColName

另外,除此之外,您的insert语句中不需要所有的交易业务;你只有一个声明(你的插入)修改数据。

大佬总结

以上是大佬教程为你收集整理的asp.net-mvc – EF映射对象不兼容的数据读取器异常全部内容,希望文章能够帮你解决asp.net-mvc – EF映射对象不兼容的数据读取器异常所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。