0

私の Entity Framework には、「Client」、「ClientAddress」、および「LookupAddressType」という 3 つの関連エンティティがあります。「LookupAddressType」は、会社の住所、住居の住所など、使用可能な住所タイプのタイプを指定するマスター クラスです。ClientAddressはLookupAddresstypeおよびClientに依存します。関連する ClientAddress データを使用してクライアントエンティティを保存しているときに、次のエラーが発生します。

「PRIMARY KEY 制約 'PK_LookupAddressType' に違反しています。オブジェクト 'dbo.LookupAddressType' に重複するキーを挿入できません。ステートメントは終了しました。

LookupAddressType を挿入する必要はありません。ここでは、関連する lookupAddressTypeId を clientAddress エンティティに挿入する必要があります。

保存コードは次のようになります。

Add(Client);
_objectContext.SaveChanges();

これどうやってするの?

ロード コードは次のとおりです。

private void LoadClientDetails(EFEntities.Client _Client)
    {

        EFEntities.LookupClientStatu clientStatus;
        var clientAddressList = new List<ClientAddress>();

        if (_Client == null)
        {
            return;
        }

        //Assign data to client object
        _Client.ClientName = rtxtName.Text;
        _Client.Alias = rtxtAlias.Text;
        _Client.ClientCode =Int32.Parse(rtxtClientCode.Text); 
        _Client.TaxPayerID = rtxtTaxPayerId.Text;

        if (rcboStatus.SelectedIndex != 0)
        {
            clientStatus = new EFEntities.LookupClientStatu
                               {
                                   ClientStatusID = (Guid) (rcboStatus.SelectedValue),
                                   ClientStatusDescription = rcboStatus.Text
                               };
            _Client.LookupClientStatu = clientStatus;
        }


        //_Client.Modified = EnvironmentClass.ModifiedUserInstance.Id;

        _Client.EffectiveDate = rdtEffectiveDate.Value;

        if (rdtExpDate.Value != rdtExpDate.MinDate)
        {
            _Client.ExpirationDate = rdtExpDate.Value;
        }
        else
        {
            _Client.ExpirationDate = null;
        }

        _Client.StartDate = DateTime.Now;


        EFEntities.ClientAddress clientAddress = null;
        // Iesi.Collections.Generic.ISet<ClientAddress> clientAddress = new HashedSet<ClientAddress>();
        foreach (var cAddress in _clientController.client.ClientAddresses)
        {
            clientAddress = cAddress;
            break;
        }

        if (clientAddress == null)
        {
            clientAddress = new EFEntities.ClientAddress();
        }

        clientAddress.Address1 = rtxtClientAdd1.Text;
        clientAddress.Address2 = rtxtClientAdd2.Text;
        clientAddress.Address3 = rtxtClientAdd3.Text;

        // Address type details
        if (rcboClientAddType.SelectedIndex != -1)
        {
            clientAddress.LookupAddressType = new EFEntities.LookupAddressType
                                            {
                                                AddressTypeID = (Guid) (rcboClientAddType.SelectedValue),
                                                AddressTypeDescription = rcboClientAddType.Text
                                            };

            //clientAddress.AddressType.Id = Convert.ToByte(rcboClientAddType.SelectedValue);
        }


        clientAddress.City = rtxtClientCity.Text;
        clientAddress.Client = _Client;

\

        _Client.ClientAddresses.Add(clientAddress);
    }
4

1 に答える 1

0

さて、これを機能させるために、次のコード行にこれを行いました。

if (rcboClientAddType.SelectedIndex != -1)
    {
        clientAddress.LookupAddressType = new EFEntities.LookupAddressType
                                        {
                                            AddressTypeID = (Guid) (rcboClientAddType.SelectedValue),
                                            AddressTypeDescription = rcboClientAddType.Text
                                        };

        //clientAddress.AddressType.Id = Convert.ToByte(rcboClientAddType.SelectedValue);
    }

上記のコードをこれに変更しました

if (rcboClientAddType.SelectedIndex != -1)
        {
            //clientAddress.LookupAddressType = new EFEntities.LookupAddressType
            //                                {
            //                                    AddressTypeID = (Guid) (rcboClientAddType.SelectedValue),
            //                                    AddressTypeDescription = rcboClientAddType.Text
            //                                };
            clientAddress.AddressTypeID = (Guid)(rcboClientAddType.SelectedValue);

        }
于 2012-07-12T12:13:31.197 に答える