0

私は EF5.0 (データベースが最初) を使用しており、複合型である "会社" エンティティを更新しようとしています。ナビゲーション プロパティとして "住所" エンティティが含まれています。UI から Company DTO オブジェクトを受け取り、AutoMapper を使用してそれを Entity オブジェクトにマップし、objectContext.Save() を呼び出して保存します。

直面している問題は、「会社」エンティティの値は保存されていますが、「住所」エンティティは保存されていないことです。以下は、各オブジェクトの詳細です-

 public class CompanyDto
{
    public int Id { get; set; }
    public string Name { get; set; }
    public AddressDto Address { get; set; }
}

AddressDto を -

public class AddressDto : IDto
{
    public int Id { get; set; }
    public string Street { get; set; }
    public string City { get; set; }
    public string PostCode { get; set; }
}

Company Entity (EF によって生成 - 最初にデータベース)

 public partial class tblCompany
{
    public tblCompany()
    {
        this.tblAddresses = new HashSet<tblAddress>();
    }

    public int ID { get; set; }
    public string CompanyName { get; set; }

    public virtual ICollection<tblAddress> tblAddresses { get; set; } //navigation property
}

with Address エンティティは次のとおりです -

  public partial class tblAddress
{
    public int ID { get; set; }
    public int CaseID { get; set; }
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
    public string County { get; set; }
    public string PostCode { get; set; }

    public virtual tblCase tblCase { get; set; }
}

DTO からエンティティに変換するための AutoMapper マッピング構成

  Mapper.CreateMap<CompanyDto, tblCase>()
            .ForMember(x => x.ID, opt => opt.MapFrom(cd => cd.Id))
            .ForMember(x => x.CompanyName, opt => opt.MapFrom(cd => cd.Name))
            .AfterMap((s, d) => d.tblAddresses.Add(new tblAddress
            {
                AddressLine1 = s.Address.Street,
                CaseID = s.Id,
                City = s.Address.City,
                PostCode = s.Address.PostCode
            }));



 public void Update(CompanyDto company)
    {
        //TO DO: check if AutoMapper could map address as well.

        var companyDao = Mapper.Map<CompanyDto, tblCase>(company);
        _companyRepository.Update(companyDao);
        _unitOfWork.Save();
    }

前もって感謝します

サイ

4

0 に答える 0