2013-01-21 24 views
0

我從web形式收集數據用下面的代碼時的空例外:添加到表

secondContact.FirstName = txtFirstNameContact2.Text; 
secondContact.LastName = txtlastNameContact2.Text; 
secondContact.EmailAddress = txtEmailAddressContact2.Text; 
secondContact.PhoneNumber = txtPhone1Contact2.Text + txtPhone2Contact2.Text + txtPhone3Contact2.Text; 
if (!string.IsNullOrEmpty(rblContactTypeContact2.SelectedValue)) 
{ 
    secondContact.SecondaryContactTypeID = Convert.ToInt32(rblContactTypeContact2.SelectedValue); 
} 
secondContact.ContactPosition = 2; 
secondContact.ProspectID = prospect.Id; 

代碼發送到存儲庫進行保存用下面的代碼(其它抓住的前景。 ID成功):

if (prospect.Id != 0) 
    { 
    if (!string.IsNullOrEmpty(secondContact.FirstName) || !string.IsNullOrEmpty(secondContact.LastName) || !string.IsNullOrEmpty(secondContact.EmailAddress) || !string.IsNullOrEmpty(secondContact.PhoneNumber)) 
    { 
     this.repository.SaveAltContact(prospect.Id, 2, secondContact); 
    } 
} 

信息庫改掉保存數據:

public void SaveAltContact(int prospectID, int contactPosition, SecondaryContact contact) 
{ 
    using (var context = new CoyleHomeBuyerEntities()) 
    { 
     SecondaryContact currentAltContact = new Model.SecondaryContact(); 

     currentAltContact = (from sec in context.SecondaryContact 
          where sec.ContactPosition == contactPosition 
          where sec.ProspectID == prospectID 
          select sec).FirstOrDefault(); 

     if (currentAltContact == null) 
     { 
      context.AddToSecondaryContact(currentAltContact); 
     } 

     currentAltContact.FirstName = contact.FirstName; 
     currentAltContact.LastName = contact.LastName; 
     currentAltContact.EmailAddress = contact.EmailAddress; 
     currentAltContact.PhoneNumber = contact.PhoneNumber; 
     currentAltContact.SecondaryContactTypeID = contact.SecondaryContactTypeID; 
     currentAltContact.ProspectID = prospectID; 
     currentAltContact.ContactPosition = contactPosition; 

     context.SaveChanges(); 
    } 
} 

它總是失敗後使用空例外這一行:

context.AddToSecondaryContact(currentAltContact); 

我百思不得其解,因爲我希望上面的查詢在這一點上返回NULL值。將SecondaryContactID設置爲主鍵並自動遞增。

Exception Details: System.ArgumentNullException: Value cannot be null. 
Parameter name: entity 

有人能指出我正確的方向,爲什麼當試圖向數據庫添加新行時失敗?

回答

0

其實我把它簡單地聲明頂部的currentAltContact變量,實例化一個新的對象只如果有一個空的工作記錄

public void SaveAltContact(int prospectID, int contactPosition, SecondaryContact contact) 
    { 
     using (var context = new CoyleHomeBuyerEntities()) 
     { 
       SecondaryContact currentAltContact; 

      currentAltContact = (from sec in context.SecondaryContact 
           where sec.ContactPosition == contactPosition 
           where sec.ProspectID == prospectID 
           select sec).FirstOrDefault(); 

      if (currentAltContact == null) 
      { 
       currentAltContact = new Model.SecondaryContact(); 
       context.AddToSecondaryContact(currentAltContact); 
      } 

      currentAltContact.FirstName = contact.FirstName; 
      currentAltContact.LastName = contact.LastName; 
      currentAltContact.EmailAddress = contact.EmailAddress; 
      currentAltContact.PhoneNumber = contact.PhoneNumber; 
      currentAltContact.SecondaryContactTypeID = contact.SecondaryContactTypeID; 
      currentAltContact.ProspectID = prospectID; 
      currentAltContact.ContactPosition = contactPosition; 

      context.SaveChanges(); 
     } 
    } 
2

您正在添加空作爲記錄,添加contact而不是currentAltContact當您沒有數據庫中的記錄。方法AddToSecondaryContact將有聯繫對象添加新記錄和currentAltContact當您想要更新記錄。

變化

if (currentAltContact == null) 
{ 
    context.AddToSecondaryContact(currentAltContact); 
} 

if (currentAltContact == null) 
{ 
    context.AddToSecondaryContact(contact); 
} 
+1

拒絕投票的原因? – Adil

+0

你能解釋一下「它不是正確的」嗎?你有什麼錯誤嗎? – Adil

+0

您有一個參數SecondaryContact聯繫人,我想這個對象充滿了值而不是null?並可以保存到數據庫。我說要將此聯繫人傳遞給方法AddToSecondaryContact,如context.AddToSecondaryContact(contact); – Adil