私は EF と AutoMapper を初めて使用し、それを使用して Web サービスを作成しようとしています。EF エンティティを直接シリアル化しようとすると、シリアル化できないため、ナビゲーション プロパティでエラーがスローされます。それらを抑制する方法を見つけたいのですが、これを行う最善の方法は、データ転送オブジェクトとして使用する POCO を作成することだと言われています。
(この時点で、ADO.NET を使用して独自の DTO を作成した方がよいと考えています。EF を使用すると、独自のクラスを作成する手間が省けるのではないでしょうか?)
EF エンティティを POCO に自動的にマップする方法として AutoMapper を推奨してもらったので、POCO をロードする次の手順で AutoMapper を使用してみました。
Public Sub Load(ByVal lngUserId As Long)
Dim query = From u In db.Users
Where u.UserID = lngUserId
Select u
AutoMapper.Mapper.Map(query.FirstOrDefault(), Me)
End Sub
問題は、AutoMapper によって自動的に無視されないように見える、ナビゲーション プロパティに再び関連していることが判明したエラーが発生することです。
そこで、AutoMapper に nav プロパティを強制的に無視させるために、次の行を追加しようとしました。
Dim oMap = Mapper.CreateMap(Of User, UserDto).ForSourceMember(Sub(src) src.tblUserFarms, Sub(opt) opt.Ignore())
(tblUserFarms は nav プロパティです)
私が見つけた C# の例からこの構文を変換しましたが、.ForSourceMember の最初のパラメーターは Lambda 式であると想定されていないようで、使用方法の良い例が見つかりません。
私は正しいアプローチを使用していますか、それともまったく別の方法を試す必要がありますか? この問題を回避するには、nav プロパティをすべて削除するだけで、それらの利点が失われますか? EF は仕事に適したツールでさえありますか?