1

私はクラス従業員を持っています:

public partial class Employee
{
    public Employee()
    {
        this.Employees1 = new HashSet<Employee>();
    }

    public int Id { get; set; }
    public string Surname { get; set; }
    public string Email { get; set; }
    public Nullable<int> ReportsToId { get; set; }

    public virtual ICollection<Employee> Employees1 { get; set; }
    public virtual Employee ReportsTo { get; set; }
}

そして、このためのビューモデル:

public class EmployeeEditModel : MappedViewModel<Employee>
{
    public int Id { get; set; }
    public string Surname { get; set; }
    public string FirstName { get; set; }
    public string Email { get; set; }
    public int? ReportsTo { get; set; }
}

MappedViewModel<T>メソッドを宣言します。

public class MappedViewModel<TEntity>: ViewModel
{
    public virtual TEntity MapToEntity()
    {
        return (TEntity)Mapper.Map(this, GetType(), typeof(TEntity));
    }
}

アクションメソッドを呼び出すMapToEntityと、

AutoMapper から例外が発生し、次のメッセージが表示されます。

タイプ マップ構成が欠落しているか、サポートされていないマッピングです。

マッピング タイプ: Int32 -> Employee System.Int32 -> Leave.Data.Employee

宛先パス: Employee.ReportsTo.ReportsTo

ソース値: 5

私のマッピングは次のように定義されています。

public static void RegisterMaps()
{
    Mapper.CreateMap<Employee, EmployeeCreateModel>();
    Mapper.CreateMap<EmployeeCreateModel, Employee>();
}

二重参照Employee.ReportsTo.ReportsToは、この例外がある種の周期的なマッピングの癖によって何らかの形で引き起こされていることを私に叫びますが、これについて何ができますか? 少なくともReportsTo、マッピングを省略して、 を呼び出した後に手動でこれを行うだけですMapToEntity。どうすればこれを解決できますか?むしろ、AutoMapper の問題のこのパターンに対して何をすべきでしょうか?

4

1 に答える 1

0

( ) と( )Mapper.CreateMapの間で変換する方法が魔法のように理解されないため、単純以上のことを行う必要があります。EmployeeViewModel.ReportsToint?Employee.ReportsToEmployee

intとの間のマッピングを作成するかEmployee、メソッドを使用ForMemberして AutoMapper にReportsToプロパティの変換方法を指示します。

于 2012-10-11T06:12:28.040 に答える