Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
C#实体框架:临时返回空值的存储过程_C#_Sql Server_Entity Framework_Stored Procedures - Fatal编程技术网

C#实体框架:临时返回空值的存储过程

C#实体框架:临时返回空值的存储过程,c#,sql-server,entity-framework,stored-procedures,C#,Sql Server,Entity Framework,Stored Procedures,我们试图使用一个实体通过存储过程写入我们的数据库,它正在工作,但是,存储过程也有一个输出来返回它刚刚插入的行的ID。我忽略了初始化所有传递的值,但我们的问题存在于以下代码中: ObjectParameter output = new ObjectParameter("cUSTOMER_ID", typeof(int)); var test = database.ADD_CUSTOMER_JSON(companyID, customerName, firstName, lastName, ad

我们试图使用一个实体通过存储过程写入我们的数据库,它正在工作,但是,存储过程也有一个输出来返回它刚刚插入的行的ID。我忽略了初始化所有传递的值,但我们的问题存在于以下代码中:

 ObjectParameter output = new ObjectParameter("cUSTOMER_ID", typeof(int));
 var test = database.ADD_CUSTOMER_JSON(companyID, customerName, firstName, lastName, address_1, address_2, cityID, stateID, zipID, primaryPhoneNumber, alternatePhoneNumber, secondaryPhoneNumber, emailAddress, customerNotes, modifiedBy, output);

 if(QuickBooksController.getTokens(companyID).Length > 0)
 {
      QuickBookCustomerQuery customer = GetCustomerDetailsForQuickBooks((int)output.Value);
      QuickBooksController.CreateCustomer(companyID, customer, (int)output.Value);
 }
当我们运行此代码时,我们得到一个错误,
output.value
为空:

System.NullReferenceException:“对象引用未设置为对象的实例。”
System.Data.Entity.CoreObjects.ObjectParameter.Value.get返回空值

我们在那里有一个断点,如果我们检查
output
的值,我们会看到它为null,但是如果我们等待几秒钟并检查它,那么它就有了值,并且数据会写入数据库。如果我们在那之后继续执行代码,那么它就工作了。我认为
If
中的代码会被阻塞,直到SP完成并返回其值。我们在应用程序的其他地方使用完全相同的代码,没有问题。唯一的区别是
var测试=…
之后会发生什么,有什么建议或想法吗?我们都被这件事难住了

存储过程:

ALTER PROCEDURE [dbo].[ADD_CUSTOMER_JSON]
    @COMPANY_ID INT,
    @CUSTOMER_NAME NVARCHAR(50) = '',
    @FIRST_NAME NVARCHAR(50) = '',
    @LAST_NAME NVARCHAR(50) = '',
    @ADDRESS_1 NVARCHAR(100) = '',
    @ADDRESS_2 NVARCHAR(100) = '',
    @CITY_ID INT,
    @STATE_ID INT,
    @ZIP_CODE_ID INT,
    @PRIMARY_PHONE_NUMBER NVARCHAR(50) = '',
    @ALTERNATE_PHONE_NUMBER NVARCHAR(50) = '',
    @SECONDARY_PHONE_NUMBER NVARCHAR(50) = '', 
    @EMAIL_ADDRESS NVARCHAR(100) = '',
    @CUSTOMER_NOTES NVARCHAR(2500) = '',
    @MODIFIED_BY NVARCHAR(50),

    @CUSTOMER_ID INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @CUSTOMER_BIRTHDATE DATE,
            @DEFAULT_PERSON_NOTE NVARCHAR(50),
            @CUSTOMER_ADDRESS_ID INT,
            @CUSTOMER_ADDRESS_NOTES_ID INT,
            @CUSTOMER_NOTES_ID INT = '',
            @CUSTOMER_ADDRESS_NOTES NVARCHAR(2500) = '',
            -- @CUSTOMER_NOTES NVARCHAR(2500) = '',
            @CUSTOMER_PERSON_NOTE_ID INT,
            @CUSTOMER_PERSON_ID INT

    IF (@CUSTOMER_NAME = '')
    BEGIN
        SET @CUSTOMER_NAME = @LAST_NAME + ', ' + @FIRST_NAME
    END

    SET @CUSTOMER_BIRTHDATE = CONVERT(DATE, '1/1/1975')
    SET @DEFAULT_PERSON_NOTE = 'PRIMARY CONTACT FOR ' + CAST(@CUSTOMER_NAME AS VARCHAR(50)) + '.'

    EXEC DBO.GET_ADDRESS_ID_BY_ADDRESS_CITY_ID_STATE_ID_ZIP_CODE_ID
        @ADDRESS_1 = @ADDRESS_1,
        @ADDRESS_2 = @ADDRESS_2,
        @CITY_ID = @CITY_ID,
        @STATE_ID = @STATE_ID,
        @ZIP_CODE_ID = @ZIP_CODE_ID,
        @ADDRESS_ID = @CUSTOMER_ADDRESS_ID OUTPUT

    IF (ISNULL (@CUSTOMER_ADDRESS_ID, 0) = 0)
    BEGIN
        EXEC    [DBO].[ADD_ADDRESS]
                @NOTES_ID = @CUSTOMER_ADDRESS_NOTES_ID,
                @ADDRESS_1 = @ADDRESS_1,
                @ADDRESS_2 = @ADDRESS_2,
                @CROSS_STREET = '',
                @CITY_ID = @CITY_ID, 
                @STATE_ID = @STATE_ID,
                @ZIP_CODE_ID = @ZIP_CODE_ID,
                @MODIFIED_BY = @MODIFIED_BY,
                @ADDRESS_ID = @CUSTOMER_ADDRESS_ID OUTPUT
    END

    EXEC    [DBO].[ADD_NOTES]
            @NOTES = @CUSTOMER_NOTES,
            @MODIFIED_BY = @MODIFIED_BY,
            @NOTES_ID = @CUSTOMER_NOTES_ID OUTPUT    

    EXEC    [DBO].[ADD_NOTES]
            @NOTES = @CUSTOMER_ADDRESS_NOTES,
            @MODIFIED_BY = @MODIFIED_BY,
            @NOTES_ID = @CUSTOMER_ADDRESS_NOTES_ID OUTPUT    

    EXEC    [DBO].[ADD_NOTES]
            @NOTES = @DEFAULT_PERSON_NOTE,
            @MODIFIED_BY = @MODIFIED_BY,
            @NOTES_ID = @CUSTOMER_PERSON_NOTE_ID OUTPUT    

    EXEC    [DBO].[ADD_PERSON]
            @FIRST_NAME = @FIRST_NAME,
            @LAST_NAME = @LAST_NAME,
            @NOTE_ID = @CUSTOMER_PERSON_NOTE_ID,
            @DATE_OF_BIRTH = @CUSTOMER_BIRTHDATE,
            @PREFIX_ID = 0,
            @SUFFIX_ID = 0,
            @PRIMARY_PHONE = @PRIMARY_PHONE_NUMBER,
            @PRIMARY_PHONE_EXT = '',
            @ALTERNATE_PHONE = @ALTERNATE_PHONE_NUMBER,
            @ALTERNATE_PHONE_EXT = '',
            @CELL_PHONE = @SECONDARY_PHONE_NUMBER,
            @MOBILE_PROVIDER_ID = NULL,
            @FAX_NUMBER = '',
            @EMAIL = @EMAIL_ADDRESS,
            @MODIFIED_BY = @MODIFIED_BY,
            @PERSON_ID = @CUSTOMER_PERSON_ID OUTPUT

    INSERT INTO CUSTOMERS (COMPANY_ID,
            QUICK_BOOKS_REFERENCE_NUMBER,
            QUICK_BOOKS_LIST_ID,
            QUICK_BOOKS_EDIT_SEQUENCE,
            CUSTOMER_NAME,
            DATE_REGISTERED,
            NOTES_ID,
            PAYCODE_ID,
            PRIMARY_CONTACT_ID,
            BILLING_ADDRESS_ID,
            CUSTOMER_TYPE_ID,
            CUSTOMER_FLAG_ID,
            DEMOGRAPHICS_DESCRIPTOR,
            IS_ACTIVE,
            MODIFIED_BY)
    VALUES (@COMPANY_ID,
            0,
            0,
            '0',
            @CUSTOMER_NAME,
            GETDATE(),
            @CUSTOMER_NOTES_ID,
            1,
            @CUSTOMER_PERSON_ID,
            @CUSTOMER_ADDRESS_ID,
            1,
            1,
            NULL,
            1,
            @MODIFIED_BY)

    SELECT @CUSTOMER_ID = SCOPE_IDENTITY();

    INSERT INTO CUSTOMER_ADDRESSES (CUSTOMER_ID,
           ADDRESS_ID,
           ADDRESS_TYPE_ID,
           FROM_DATE,
           MODIFIED_BY)
    VALUES (@CUSTOMER_ID,
            @CUSTOMER_ADDRESS_ID,
            2,
            GETDATE(),
            @MODIFIED_BY)

    SELECT CUSTOMER_ID 
    FROM CUSTOMERS 
    WHERE CUSTOMER_ID = @CUSTOMER_ID;
END
全功能

public ObjectResult<Nullable<int>> CreateCustomer([FromBody]dynamic customerInput)
{
    var identity = (ClaimsIdentity)User.Identity;
    var claimRole = identity.Claims.ToList()[0].Value.ToInt();
    var claimCompany = identity.Claims.ToList()[3].Value.ToInt();
    var claimUsername = identity.Claims.ToList()[5].Value.ToString();
    int[] allowedRoles = new int[] { 1, 2, 3 , 8};

    if (Array.IndexOf(allowedRoles, claimRole) != -1)
    {
        if (claimRole == 3 && claimCompany != (int)customerInput["COMPANY_ID"])
        {
            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
        }

        var companyID = (int)customerInput["COMPANY_ID"];
        var customerName = customerInput["CUSTOMER_NAME"].ToString();
        var firstName = customerInput["FIRST_NAME"].ToString();
        var lastName = customerInput["LAST_NAME"].ToString();
        var address_1 = customerInput["ADDRESS_1"].ToString();
        var address_2 = customerInput["ADDRESS_2"].ToString();
        var cityID = (int)customerInput["CITY_ID"];
        var stateID = (int)customerInput["STATE_ID"];
        var zipID = (int)customerInput["ZIP_CODE_ID"];
        var primaryPhoneNumber = customerInput["PRIMARY_PHONE_NUMBER"].ToString();
        var alternatePhoneNumber = customerInput["ALTERNATE_PHONE_NUMBER"].ToString();
        var secondaryPhoneNumber = customerInput["SECONDARY_PHONE_NUMBER"].ToString();
        var emailAddress = customerInput["EMAIL_ADDRESS"].ToString();
        var customerNotes = customerInput["CUSTOMER_NOTES"].ToString();
        var modifiedBy = claimUsername;

        ObjectParameter output = new ObjectParameter("cUSTOMER_ID", typeof(int));

        var test = database.ADD_CUSTOMER_JSON(companyID, customerName, firstName, lastName, address_1, address_2, cityID, stateID, zipID, primaryPhoneNumber, alternatePhoneNumber, secondaryPhoneNumber, emailAddress, customerNotes, modifiedBy, output);

        if(QuickBooksController.getTokens(companyID).Length > 0)
        {
            // Do the quickbooks call to create the customer and update the DB with the quickbooks id
            QuickBookCustomerQuery customer = GetCustomerDetailsForQuickBooks((int)output.Value);
            QuickBooksController.CreateCustomer(companyID, customer, (int)output.Value);
        }        

        return test;
    }

    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
}
public ObjectResult CreateCustomer([FromBody]动态customerInput)
{
var identity=(ClaimsIdentity)User.identity;
var claimRole=identity.Claims.ToList()[0].Value.ToInt();
var claimCompany=identity.Claims.ToList()[3].Value.ToInt();
var claimUsername=identity.Claims.ToList()[5].Value.ToString();
int[]allowedRoles=新的int[]{1,2,3,8};
if(Array.IndexOf(allowedRoles,claimRole)!=-1)
{
如果(claimRole==3&&claimCompany!=(int)customerInput[“公司ID”])
{
抛出新的HttpResponseException(新的HttpResponseMessage(HttpStatusCode.Unauthorized));
}
var companyID=(int)customerInput[“COMPANY_ID”];
var customerName=customerInput[“CUSTOMER_NAME”].ToString();
var firstName=customerInput[“FIRST_NAME”].ToString();
var lastName=customerInput[“LAST_NAME”].ToString();
var address_1=customerInput[“address_1”].ToString();
var address_2=customerInput[“address_2”].ToString();
var cityID=(int)customerInput[“CITY_ID”];
var stateID=(int)customerInput[“STATE_ID”];
var zipID=(int)customerInput[“邮政编码”\u ID];
var primaryPhoneNumber=customerInput[“PRIMARY_PHONE_NUMBER”]。ToString();
var alternatePhoneNumber=customerInput[“ALTERNATE_PHONE_NUMBER”]。ToString();
var secondaryPhoneNumber=customerInput[“SECONDARY_PHONE_NUMBER”]。ToString();
var emailAddress=customerInput[“EMAIL_ADDRESS”].ToString();
var customerNotes=customerInput[“CUSTOMER_NOTES”].ToString();
var modifiedBy=索赔用户名;
ObjectParameter输出=新的ObjectParameter(“cUSTOMER_ID”,typeof(int));
var test=database.ADD_CUSTOMER_JSON(companyID、customerName、firstName、lastName、address_1、address_2、cityID、stateID、zipID、primaryPhoneNumber、alternatePhoneNumber、secondaryPhoneNumber、emailAddress、customerNotes、modifiedBy、output);
if(QuickBooksController.getTokens(companyID).Length>0)
{
//执行quickbooks调用以创建客户并使用quickbooks id更新数据库
QuickBookCustomerQuery customer=GetCustomerDetailsForQuickBooks((int)output.Value);
CreateCustomer(companyID,customer,(int)output.Value);
}        
回归试验;
}
抛出新的HttpResponseException(新的HttpResponseMessage(HttpStatusCode.Unauthorized));
}
添加\u客户\u JSON实体代码:

public virtual ObjectResult<Nullable<int>> ADD_CUSTOMER_JSON(Nullable<int> cOMPANY_ID, string cUSTOMER_NAME, string fIRST_NAME, string lAST_NAME, string aDDRESS_1, string aDDRESS_2, Nullable<int> cITY_ID, Nullable<int> sTATE_ID, Nullable<int> zIP_CODE_ID, string pRIMARY_PHONE_NUMBER, string aLTERNATE_PHONE_NUMBER, string sECONDARY_PHONE_NUMBER, string eMAIL_ADDRESS, string cUSTOMER_NOTES, string mODIFIED_BY, ObjectParameter cUSTOMER_ID)
{
    var cOMPANY_IDParameter = cOMPANY_ID.HasValue ?
        new ObjectParameter("COMPANY_ID", cOMPANY_ID) :
        new ObjectParameter("COMPANY_ID", typeof(int));

    var cUSTOMER_NAMEParameter = cUSTOMER_NAME != null ?
        new ObjectParameter("CUSTOMER_NAME", cUSTOMER_NAME) :
        new ObjectParameter("CUSTOMER_NAME", typeof(string));

    var fIRST_NAMEParameter = fIRST_NAME != null ?
        new ObjectParameter("FIRST_NAME", fIRST_NAME) :
        new ObjectParameter("FIRST_NAME", typeof(string));

    var lAST_NAMEParameter = lAST_NAME != null ?
        new ObjectParameter("LAST_NAME", lAST_NAME) :
        new ObjectParameter("LAST_NAME", typeof(string));

    var aDDRESS_1Parameter = aDDRESS_1 != null ?
        new ObjectParameter("ADDRESS_1", aDDRESS_1) :
        new ObjectParameter("ADDRESS_1", typeof(string));

    var aDDRESS_2Parameter = aDDRESS_2 != null ?
        new ObjectParameter("ADDRESS_2", aDDRESS_2) :
        new ObjectParameter("ADDRESS_2", typeof(string));

    var cITY_IDParameter = cITY_ID.HasValue ?
        new ObjectParameter("CITY_ID", cITY_ID) :
        new ObjectParameter("CITY_ID", typeof(int));

    var sTATE_IDParameter = sTATE_ID.HasValue ?
        new ObjectParameter("STATE_ID", sTATE_ID) :
        new ObjectParameter("STATE_ID", typeof(int));

    var zIP_CODE_IDParameter = zIP_CODE_ID.HasValue ?
        new ObjectParameter("ZIP_CODE_ID", zIP_CODE_ID) :
        new ObjectParameter("ZIP_CODE_ID", typeof(int));

    var pRIMARY_PHONE_NUMBERParameter = pRIMARY_PHONE_NUMBER != null ?
        new ObjectParameter("PRIMARY_PHONE_NUMBER", pRIMARY_PHONE_NUMBER) :
        new ObjectParameter("PRIMARY_PHONE_NUMBER", typeof(string));

    var aLTERNATE_PHONE_NUMBERParameter = aLTERNATE_PHONE_NUMBER != null ?
        new ObjectParameter("ALTERNATE_PHONE_NUMBER", aLTERNATE_PHONE_NUMBER) :
        new ObjectParameter("ALTERNATE_PHONE_NUMBER", typeof(string));

    var sECONDARY_PHONE_NUMBERParameter = sECONDARY_PHONE_NUMBER != null ?
        new ObjectParameter("SECONDARY_PHONE_NUMBER", sECONDARY_PHONE_NUMBER) :
        new ObjectParameter("SECONDARY_PHONE_NUMBER", typeof(string));

    var eMAIL_ADDRESSParameter = eMAIL_ADDRESS != null ?
        new ObjectParameter("EMAIL_ADDRESS", eMAIL_ADDRESS) :
        new ObjectParameter("EMAIL_ADDRESS", typeof(string));

    var cUSTOMER_NOTESParameter = cUSTOMER_NOTES != null ?
        new ObjectParameter("CUSTOMER_NOTES", cUSTOMER_NOTES) :
        new ObjectParameter("CUSTOMER_NOTES", typeof(string));

    var mODIFIED_BYParameter = mODIFIED_BY != null ?
        new ObjectParameter("MODIFIED_BY", mODIFIED_BY) :
        new ObjectParameter("MODIFIED_BY", typeof(string));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>>("ADD_CUSTOMER_JSON", cOMPANY_IDParameter, cUSTOMER_NAMEParameter, fIRST_NAMEParameter, lAST_NAMEParameter, aDDRESS_1Parameter, aDDRESS_2Parameter, cITY_IDParameter, sTATE_IDParameter, zIP_CODE_IDParameter, pRIMARY_PHONE_NUMBERParameter, aLTERNATE_PHONE_NUMBERParameter, sECONDARY_PHONE_NUMBERParameter, eMAIL_ADDRESSParameter, cUSTOMER_NOTESParameter, mODIFIED_BYParameter, cUSTOMER_ID);
}
公共虚拟对象结果添加\u客户\u JSON(可为空的公司ID、字符串客户名称、字符串名字、字符串姓氏、字符串地址1、字符串地址2、可为空的城市ID、可为空的州ID、可为空的邮政编码ID、字符串主要电话号码、字符串备用电话号码、字符串次要电话号码、字符串电子邮件地址、字符串客户备注、字符串修改人、对象参数c)客户(ID)
{
var cOMPANY\u IDParameter=cOMPANY\u ID.HasValue?
新的ObjectParameter(“公司ID”,公司ID):
新的ObjectParameter(“COMPANY_ID”,typeof(int));
var cUSTOMER\u NAME参数=cUSTOMER\u NAME!=null?
新对象参数(“客户名称”,客户名称):
新的ObjectParameter(“客户名称”,类型(字符串));
var fIRST\u NAME参数=fIRST\u NAME!=null?
新的ObjectParameter(“FIRST_NAME”,FIRST_NAME):
新的ObjectParameter(“FIRST_NAME”,typeof(string));
var lAST\u NAME参数=lAST\u NAME!=null?
新的ObjectParameter(“姓氏”,姓氏):
新的ObjectParameter(“姓氏”,typeof(字符串));
变量地址\u 1参数=地址\u 1!=空?
新的ObjectParameter(“地址1”,地址1):
新的ObjectParameter(“ADDRESS_1”,typeof(string));
变量地址\u 2参数=地址\u 2!=空?
新的ObjectParameter(“地址2”,地址2):
新的ObjectParameter(“ADDRESS_2”,typeof(string));
var cITY\u IDParameter=cITY\u ID.HasValue?
新对象参数(“城市ID”,城市ID):
新的ObjectParameter(“CITY_ID”,typeof(int));
var sTATE_IDParameter=sTATE_ID.HasValue?
新的ObjectParameter(“STATE\u ID”,STATE\u ID):
新的ObjectParameter(“STATE_ID”,typeof(int));
var zIP\u CODE\u IDParameter=zIP\u CODE\u ID.HasValue?
新的ObjectParameter(“邮政编码ID”,邮政编码ID):
新的ObjectParameter(“ZIP_CODE_ID”,typeof(int));
var pRIMARY\u PHONE\u NUMBER参数=pRIMARY\u PHONE\u NUMBER!=空?
新的ObjectParameter(“主要电话号码”,主要电话号码):
新的ObjectParameter(“主电话号码”,typeof(字符串));
var aLTERNATE\u PHONE\u NUMBER参数=aLTERNATE\u PHONE\u NUMBER!=空?
新对象参数(“备用电话号码”,备用电话号码)