、私は次のようしているドメインクラス:Automapper問題は、プロファイルの
次のプロファイルを使用してpublic class AlumnoModel
{
#region Fields
public int Id { get; set; }
public string Nombre { get; set; }
public string Apellido { get; set; }
public string Legajo { get; set; }
public int Dni { get; set; }
public TurnoModel Turno { get; set; }
public CarreraModel Carrera { get; set; }
#endregion
}
public class CarreraModel
{
#region Fields
public int Id { get; set; }
public string Descripcion { get; set; }
#endregion
}
public class TurnoModel
{
#region Fields
public int Id { get; set; }
public string Descripcion { get; set; }
#endregion
}
とIM:
public partial class Alumnos
{
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Nombre { get; set; }
[Required]
[StringLength(50)]
public string Apellido { get; set; }
[Required]
[StringLength(50)]
public string Legajo { get; set; }
public int Dni { get; set; }
public int Carrera { get; set; }
public int Turno { get; set; }
public virtual Carreras Carreras { get; set; }
public virtual Turnos Turnos { get; set; }
}
public partial class Carreras
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Carreras()
{
Alumnos = new HashSet<Alumnos>();
}
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Descripcion { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Alumnos> Alumnos { get; set; }
}
public partial class Turnos
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Turnos()
{
Alumnos = new HashSet<Alumnos>();
}
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Descripcion { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Alumnos> Alumnos { get; set; }
}
そして、これは私のモデルです
public class AlumnoProfile : Profile
{
public AlumnoProfile()
{
CreateMap<Alumnos, AlumnoModel>()
.ForMember(d => d.Nombre, s => s.MapFrom(src => src.Nombre))
.ForMember(d => d.Apellido, s => s.MapFrom(src => src.Apellido))
.ForMember(d => d.Legajo, s => s.MapFrom(src => src.Legajo))
.ForMember(d => d.Dni, s => s.MapFrom(src => src.Dni))
.ForMember(d => d.Turno, s => s.MapFrom(src => src.Turnos))
.ForMember(d => d.Carrera, s => s.MapFrom(src => src.Carreras));
CreateMap<AlumnoModel, Alumnos>()
.ForMember(d => d.Id, s => s.Ignore())
.ForMember(d => d.Nombre, s => s.MapFrom(src => src.Nombre))
.ForMember(d => d.Apellido, s => s.MapFrom(src => src.Apellido))
.ForMember(d => d.Legajo, s => s.MapFrom(src => src.Legajo))
.ForMember(d => d.Dni, s => s.MapFrom(src => src.Dni))
.ForMember(d => d.Carrera, s => s.MapFrom(src => src.Carrera.Id))
.ForMember(d => d.Turno, s => s.MapFrom(src => src.Turno.Id));
}
}
public class CarreraProfile : Profile
{
public CarreraProfile()
{
CreateMap<Carreras, CarreraModel>()
.ForMember(d => d.Id, s => s.MapFrom(src => src.Id))
.ForMember(d => d.Descripcion, s => s.MapFrom(src => src.Descripcion))
.ForAllOtherMembers(d => d.Ignore());
CreateMap<CarreraModel, Carreras>()
.ForMember(d => d.Id, s => s.MapFrom(src => src.Id))
.ForAllOtherMembers(opts => opts.Ignore());
}
}
public class TurnoProfile : Profile
{
public TurnoProfile()
{
CreateMap<TurnoModel, Turnos>()
.ForMember(d => d.Id, s => s.MapFrom(src => src.Id))
.ForAllOtherMembers(d => d.Ignore());
CreateMap<Turnos, TurnoModel>()
.ForMember(d => d.Id, s => s.MapFrom(src => src.Id))
.ForMember(d => d.Descripcion, s => s.MapFrom(src => src.Descripcion))
.ForAllOtherMembers(d => d.Ignore());
}
}
これは私がオートファックを使用している方法です:
builder.RegisterAssemblyTypes().AssignableTo(typeof(Profile));
builder.Register(c => new MapperConfiguration
(cfg =>
{
foreach (var profile in c.Resolve<IEnumerable<Profile>>())
{
cfg.AddProfile(profile);
}
}
)).AsSelf().SingleInstance();
builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve)).As<IMapper>().InstancePerLifetimeScope();
とIM持つとイムは、ドメインクラスにモデルからマッピングしようとしている問題は
Unmapped members were found. Review the types and members below.
Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type
For no matching constructor, add a no-arg ctor, add optional arguments, or map all of the constructor parameters
==============================================================
AlumnoModel -> Alumnos (Destination member list)
Prog_II.Data.Model.AlumnoModel -> Prog_II.Data.Domain.Alumnos (Destination member list)
Unmapped properties:
Carreras
Turnos
私はMemberlist.Source
を使用してみました(データを保存)し、私がした各プロパティの:
.ForSourceMember(d => d.property, opt => opt.Ignore())
私は使ってみました.ForAllOtherMembers(opt => opt.Ignore())
私がMapper.Mapを呼び出すのは、他の2つのモデルのマップです。たとえば、マップしたい場合はから:
public Alumnos FromModelToDomain_Alumnos(AlumnoModel alumno)
{
return _Mapper.Map<Alumnos>(alumno);
}
が、私は次の行を追加する必要が動作するために:
public Alumnos FromModelToDomain_Alumnos(AlumnoModel alumno)
{
FromModelToDomain_Turno(alumno.Turno);
FromModelToDomain_Carrera(alumno.Carrera);
return _Mapper.Map<Alumnos>(alumno);
}
public Turnos FromModelToDomain_Turno(TurnoModel turno)
{
return _Mapper.Map<Turnos>(turno);
}
public Carreras FromModelToDomain_Carrera(CarreraModel carrera)
{
return _Mapper.Map<Carreras>(carrera);
}
私はそれらをマッピングするために持っているように理にかなっています。 、
Unmapped members were found. Review the types and members below.
Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type
For no matching constructor, add a no-arg ctor, add optional arguments, or map all of the constructor parameters
============================================================
TurnoModel -> Turnos (Destination member list)
Prog_II.Data.Model.TurnoModel -> Prog_II.Data.Domain.Turnos (Destination member list)
Unmapped properties:
Alumnos
そしてTurnos
はAlumnos
(ドメインクラス)のHashSetのを持っているので、これは、テーブル間の1からnの関係(EF 5)の起こる:私はこれを行うと
は、これは、1つの以上のエラーがスローされます私は私のモデルでそれを持っていないので、私はこのプロパティが無視されたい。