automapperがICollection
を指定されたコレクションではなくint
に移動しようとしているautomapper v6.0.2で問題が発生しました。AutoMapperがサブプロパティーをマッピングしていません
エラー:
public Member()
{
this.Dependents = new HashSet<Dependent>();
}
public virtual ICollection<Dependent> Dependents { get; set; }
AutoMapperコンフィグ
CreateMap<Dependent, DependentDetailDto>();
CreateMap<Member, MemberDetailDto>()
.ForMember(a => a.Dependents, o => o.MapFrom(x => Mapper.Map<ICollection<Dependent>, ICollection<DependentDetail>>(x.Dependents)));
依存
Mapping types:
Member_B3B146AB4F61AEDE3DF3639BDBD65BFA5BCA0FC414F11960DC39DA834F2A8CBD -> ICollection`1
System.Data.Entity.DynamicProxies.Memberr_B3B146AB4F61AEDE3DF3639BDBD65BFA5BCA0FC414F11960DC39DA834F2A8CBD -> System.Collections.Generic.ICollection`1[[MemberService.Dto.DependentDetailDto, MemberService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]
Destination path:
MemberDetailDto.Dependents.Dependents
Source value:
System.Data.Entity.DynamicProxies.MbmRosterSubscriber_B3B146AB4F61AEDE3DF3639BDBD65BFA5BCA0FC414F11960DC39DA834F2A8CBD ---> System.OverflowException: Value was either too large or too small for an Int32.
メンバー:
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public System.DateTime Dob { get; set; }
public string Sex { get; set; }
public string Relationship { get; set; }
public string CreatedBy { get; set; }
public string ModifiedBy { get; set; }
public string DepartmentCode { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string Address3 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string MailCountry { get; set; }
public string Zip { get; set; }
public Nullable<System.DateTime> SsnEncryptDate { get; set; }
扶養が除去された加入者は、完全にDependent
エンティティについては
とModel
彼らはコピーされ、すべての項目public
とペーストをマッピングします。 AutoMapperが指定されたマップではなく、int
にコレクションを圧縮しようとしているように見えます。
すべてのアイデア? これは、非同期方式における機能試験で試験された:
Dependents
ナビゲーションプロパティ
編集です。テストが作成されている クイック単位:今すぐ返される
[TestMethod]
public void RetrieveActiveMember()
{
MemberEntity.Member Subscriber = new Member();
ICollection<Dependent> Dependent = new List<Dependent>();
Dependent.Add(new Dependent { HostCountry = "HOME" });
Subscriber.Dependents = Dependent;
var Mapped = AutoMapper.Mapper.Map<Member, MemberDetailDto>(Subscriber);
Assert.IsNotNull(Mapped);
}
エラーはタイプXのメソッド「追加」である実装を持っていない」
Property:
Dependents ---> System.TypeLoadException: Method 'Add' in type 'Proxy<System.Collections.Generic.ICollection`1[[MemberService.Dto.DependentDetailDto_MemberService_Version=1.0.0.0_Culture=neutral_PublicKeyToken=null]]_mscorlib_Version=4.0.0.0_Culture=neutral_PublicKeyToken=b77a5c561934e089>' from assembly 'AutoMapper.Proxies, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005' does not have an implementation.
に依存ためautomapperの設定を変更します
CreateMap<ICollection<Dependent>, ICollection<DependentDetailDto>>()
.ConstructUsing((ICollection<Dependent> Dependents) => {
List<DependentDetailDto> DependentList = new List<DependentDetailDto>();
foreach (var Dependent in Dependents)
DependentList.Add(new DependentDetailDto { });
return DependentList;
});
実際には大きな注意書きであるAutomapperを使用していなくてもユニットテストが機能しますが、それでも機能テストは中断します
扶養が偶数フィールドに
補遺持っていないように私は追加するには何かを考えることはできません:エンティティ、DTO、呼び出し元が異なるライブラリー内のすべてのですが、私はすることができていないがそれを.NETFiddleで複製してください。
'Dependent'と' DependentDetail'クラスの定義を追加するのを忘れました。 –
追加されました。クラス名の宣言を除いて何も残してコピー&ペーストしません。 – SCFi
まだ問題を再現できません。問題を再現する[最小、完全、かつ検証可能な例の作成方法](http://stackoverflow.com/help/mcve)に気を配りますか? –