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;

以下のコードとともに保存されるリポジトリにコードを送信します(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

データベースに新しい行を追加しようとしたときに、なぜこれが失敗するのかについて、誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

2

データベースにレコードがない場合は、レコードとしてnullを追加します。contact代わりに追加します。currentAltContactメソッドAddToSecondaryContactには、レコードを更新するときに新しいレコードとcurrentAltContactを追加するための連絡先オブジェクトがあります。

変化する

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

if (currentAltContact == null)
{
    context.AddToSecondaryContact(contact);
}
于 2013-01-21T06:36:34.557 に答える
0

実際、上部でcurrentAltContact変数を宣言し、nullレコードがあった場合にのみ新しいオブジェクトをインスタンス化することで、これを機能させることができました。

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();
        }
    }
于 2013-01-21T06:52:25.817 に答える