我正在使用以下代码从网络表单收集数据:
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;
将代码发送到存储库以使用下面的代码保存(它抓住了prospect.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();
}
}
在此行之后总是失败并出现Null异常:
context.AddToSecondaryContact(currentAltContact);
我很困惑,因为我希望上面的查询在这一点上返回一个NULL值。 SecondaryContactID
被设置为主键并自动递增。
Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: entity
在尝试向数据库添加新行时,有人能指出正确的方向吗?
答案 0 :(得分:2)
您正在添加null作为记录,当您在数据库中没有记录时,添加contact
而不是currentAltContact
。当您想要更新记录时,方法AddToSecondaryContact将具有联系对象以添加新记录和currentAltContact。
更改
if (currentAltContact == null)
{
context.AddToSecondaryContact(currentAltContact);
}
到
if (currentAltContact == null)
{
context.AddToSecondaryContact(contact);
}
答案 1 :(得分: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();
}
}