2017-10-14 12 views
0

私は新しいasp mvc core 2.0の角度テンプレートを作成し、Automapperでコントローラにマップしたいモデルとdtosを追加しました。私はautomapper 6.1.1を含んだ。 http://localhost:61031/api/classesに移動すると、タイプマップの設定が欠落しているか、サポートされていないマッピングが表示されます。私は多くの記事を読んだが、何が起こっているのかを見つけることができない。次のようにAsp MVC core 2.0 automapper(タイプマップ設定が見つからないか、サポートされていないマッピングです。)

私のコードは次のとおりです。

プロジェクトの概要 enter image description here

MODELS

Models.Classes.csを

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Linq; 
using System.Threading.Tasks; 

namespace WebApplication1.Models 
{ 
    public class Classes 
    { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Id { get; set; } 

     [Required] 
     [MaxLength(50)] 
     public string ClassName { get; set; } 

     [Required] 
     [Range(1, 50)] 
     public int MaxStudents { get; set; } 

     public ICollection<Students> Students { get; set; } = new List<Students>(); 
    } 
} 

Models.Students.cs

using System; 

namespace WebApplication1.Models 
{ 
    public class Students 
    { 
     public int Id { get; set; } 

     public string FirstName { get; set; } 

     public string LastName { get; set; } 

     public DateTime DateOfBirth { get; set; } 

     public Gender Gender { get; set; } 



     public Classes Classes { get; set; } 

     public int ClassId { get; set; } 
    } 
} 

Models.EdulyContext.cs

using Microsoft.EntityFrameworkCore; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 

namespace WebApplication1.Models 
{ 
    public class EdulyContext : DbContext 
    { 
     public EdulyContext(DbContextOptions<EdulyContext> options) : base(options) 
     { 
      Database.Migrate(); 
     } 

     public DbSet<Classes> Classes { get; set; } 
     public DbSet<Students> Students { get; set; } 
    } 
} 

DTOS

Dto.ClassesDtos.ClassesDto.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using WebApplication1.Models; 

namespace WebApplication1.Dto.ClassesDtos 
{ 
    public class ClassesDto 
    { 
     public string ClassName { get; set; } 

     public int MaxStudents { get; set; } 

     public ICollection<Students> Students { get; set; } = new List<Students>(); 
    } 
} 

Dto.StudentsDtos.StudentDto.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using WebApplication1.Models; 

namespace WebApplication1.Dto.StudentsDtos 
{ 
    public class StudentsDto 
    { 
     public int Id { get; set; } 

     public string FirstName { get; set; } 

     public string LastName { get; set; } 

     public DateTime DateOfBirth { get; set; } 

     public Gender Gender { get; set; } 



     public Models.Classes Classes { get; set; } 

     public int ClassId { get; set; } 
    } 
} 

コントローラー

Controllers.ClassesController.csスタートアップにおいて

using AutoMapper; 
using Microsoft.AspNetCore.Mvc; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using WebApplication1.Dto.ClassesDtos; 
using WebApplication1.Repositories.Interfaces; 

namespace WebApplication1.Controllers 
{ 
    [Route("api/classes")] 
    public class ClassesController : Controller 
    { 
     private IClassesRepository _classesRepository; 

     public ClassesController(IClassesRepository classesRepository) 
     { 
      _classesRepository = classesRepository; 
     } 

     [HttpGet()] 
     public IActionResult GetClasses() 
     { 
      var classesEntities = _classesRepository.GetClasses(); 
      var results = Mapper.Map<ClassesDto>(classesEntities); 

      return Ok(results); 

     } 

    } 
} 

のProgram.cs

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Threading.Tasks; 
using Microsoft.AspNetCore; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.Extensions.Configuration; 
using Microsoft.Extensions.Logging; 

namespace WebApplication1 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      var host = BuildWebHost(args); 
      host.Run(); 
     } 

     public static IWebHost BuildWebHost(string[] args) 
     { 
      return new WebHostBuilder() 
       .UseKestrel() 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .ConfigureAppConfiguration((builderContext, config) => 
       { 
        IHostingEnvironment env = builderContext.HostingEnvironment; 
       }) 
       .UseIISIntegration() 
       .UseStartup<Startup>() 
       .Build(); 
     } 
    } 
} 

Startup.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using Microsoft.AspNetCore.Builder; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.AspNetCore.SpaServices.Webpack; 
using Microsoft.Extensions.Configuration; 
using Microsoft.Extensions.DependencyInjection; 
using WebApplication1.Models; 
using WebApplication1.Dto; 
using Microsoft.EntityFrameworkCore; 
using WebApplication1.Repositories.Interfaces; 
using WebApplication1.Repositories; 

namespace WebApplication1 
{ 
    public class Startup 
    { 
     public Startup(IConfiguration configuration) 
     { 
      Configuration = configuration; 
     } 

     public IConfiguration Configuration { get; } 

     // This method gets called by the runtime. Use this method to add services to the container. 
     public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddMvc(); 

      var connectionString = @"server=(localdb)\mssqllocaldb;Database=EdulyDbCore2;Trusted_Connection=True"; 
      services.AddDbContext<EdulyContext>(o => o.UseSqlServer(connectionString)); 

      services.AddScoped<IClassesRepository, ClassesRepository>(); 
     } 

     // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
     public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
     { 
      if (env.IsDevelopment()) 
      { 
       app.UseDeveloperExceptionPage(); 
       app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions 
       { 
        HotModuleReplacement = true 
       }); 
      } 
      else 
      { 
       app.UseExceptionHandler("/Home/Error"); 
      } 


      app.UseStaticFiles(); 


      AutoMapper.Mapper.Initialize(cfg => 
      { 
       cfg.CreateMap<Models.Classes, Dto.ClassesDtos.ClassesDto>(); 
       cfg.CreateMap<Dto.ClassesDtos.ClassesDto, Models.Classes>(); 

       cfg.CreateMap<Models.Students, Dto.StudentsDtos.StudentsDto>(); 
       cfg.CreateMap<Dto.StudentsDtos.StudentsDto, Models.Students>(); 
      }); 

      app.UseMvc(routes => 
      { 
       routes.MapRoute(
        name: "default", 
        template: "{controller=Home}/{action=Index}/{id?}"); 

       routes.MapSpaFallbackRoute(
        name: "spa-fallback", 
        defaults: new { controller = "Home", action = "Index" }); 
      }); 
     } 
    } 
} 

私は一定であることがclassesDtoにクラスから両方向にマッピング。私が間違ってやっていることを誰かが知っているなら、助けはずっと償われているでしょう。乾杯!

答えて

0

小さな休憩を取った後、突然私は間違いを認識しました。 クラスのコントローラでは、get戻り値の型はIEnumerableである必要があります

したがって: var results = Mapper.Map(classesEntities);

は次のようになります。 var results = Mapper.Map>(classesEntities);

関連する問題