3

コンテキストからドメイン タイプのプロパティを既存のエンティティにマップするオートマッパーが必要です (基本的には、変更されたフィールドを更新するだけです)。Navigation プロパティを無視し、スカラー プロパティのみをマップする必要があります。

ForMember(o => o.MyNavProperty, opt => opt.Ignore) と言えば動作させることができますが、すべてのマッピングに対して一般的な方法を使用して、nav プロパティではなくスカラーのみをマップするように指示したいと思います。 .

マウリシオのソリューションに従おうとしています:

ASP.net MVC - ViewModel から Entity Framework エンティティに AutoMapper を使用する必要がありますか?

しかし、ナビゲーション プロパティを正常に無視することはできません。

これが私の更新されたバージョンです:

      private static void CreateMapForEF<TDto, TEntity>()
      {
         Mapper.CreateMap<TDto, TEntity>()
    .ForAllMembers(o => o.Condition(ctx =>
                                       {

                                          var members = ctx.Parent.SourceType.GetMember(ctx.MemberName); // get the MemberInfo that we are mapping

                                          if (!members.Any())
                                             return false;

                                          if (members.First().GetCustomAttributes(
                                                typeof (EdmRelationshipNavigationPropertyAttribute), false).Any())
                                             return false;

                                          return members.First().GetCustomAttributes(typeof(EdmScalarPropertyAttribute), false).Any(); // determine if the Member has the EdmScalar attribute set

                                       }));
      }
4

2 に答える 2

1

エンティティにインターフェイスを追加し、インターフェイスとの間でマッピングする明示的なアプローチを使用します。したがって、除外するのではなく、何を含めるかを明確にしています。インターフェースは、部分クラスを宣言することによって追加されます。

デカップリング、テストスタブ、モックなどにインターフェイスを使用しているため、インターフェイスは無料です。

おそらく私だけかもしれませんが、AutoMapper 構成で無視されるのは好きではありません。それを正当化することはできませんが、私には間違っていると感じています.

于 2012-09-30T05:36:03.310 に答える