1

Nuget の Automapper、Unit Of Work、Entity Framework 5、ASPNET MVC 4、WebApi、および Windsor Castle を使用するアプリケーションに取り組んでいます。

これをマッピングする必要があるのか​​ 、それとも Automapper によって自動的にマッピングされる必要があるのか​​ わかりません

public IEnumerable<StoreDto> Get()
{
    return Uow.Stores.GetAll().OrderBy(s => s.Name);
}

Uow.Stores.GetAll().OrderBy(s => s.Name)を返しますIOrderedQueryable<Store>

エラー メッセージが表示される

式の型 IOrderedQueryable を型 IEnumerable に変換できません

foreach を実行して、返されGetAllた各オブジェクトを Automapper のメソッドにStoreDto変換する必要がありますか? Mapper.MapAutomapper はそれを変換してくれませんか?

これが、Automapper の使用方法と登録方法です。何か改善すべき/できることがあれば教えてください。

AutomapperInstaller.cs:

 public class AutoMapperInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            Mapper.Initialize(x => x.ConstructServicesUsing(container.Resolve));

            RegisterProfilesAndResolvers(container);
            RegisterMapperEngine(container);
        }

        private void RegisterMapperEngine(IWindsorContainer container)
        {
            container.Register(Component.For<IMappingEngine>().Instance(Mapper.Engine));
        }

        private void RegisterProfilesAndResolvers(IWindsorContainer container)
        {
            // register value resolvers
            container.Register(AllTypes.FromAssembly(Assembly.GetExecutingAssembly()).BasedOn<IValueResolver>());

            // register profiles
            container.Register(AllTypes.FromThisAssembly().BasedOn<Profile>());
            var profiles = container.ResolveAll<Profile>();

            foreach (var profile in profiles)
            {
                Mapper.AddProfile(profile);
            }
        }

WebWindsorInstaller:

internal class WebWindsorInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(Component
                .For<RepositoryFactories>()
                .ImplementedBy<RepositoryFactories>()
                .LifestyleSingleton());

            container.Register(Component
                .For<IRepositoryProvider>()
                .ImplementedBy<RepositoryProvider>()
                .LifestylePerWebRequest());

            container.Register(Component
                .For<IProjUow>()
                .ImplementedBy<ProjUow>()
                .LifestylePerWebRequest());

            container.Register(Classes
                .FromAssemblyContaining<Api.StoresController>()
                .BasedOn<IHttpController>()
                .If(t => t.Name.EndsWith("Controller"))
                .LifestylePerWebRequest());

            RegisterMapping(container, store);
        }

        private void RegisterMapping(IWindsorContainer container, IConfigurationStore store)
        {
            Mapper.CreateMap<Store, StoreDto>();
        }
}

Store.cs:

public class Store
    {
        public Store()
        {
            this.Branches = new List<Branch>();
        }

        public int Id { get; set; }
        public string Name { get; set; }
        public System.Data.Spatial.DbGeography Location{ get; set; }

        public virtual ICollection<Branch> Branches{ get; set; }
    }

StoreDto.cs(今までのストアと同じ)

public class StoreDto
    {
        public StoreDto()
        {
            this.Branches = new List<BranchDto>();
        }

        public int Id { get; set; }
        public string Name { get; set; }
        public System.Data.Spatial.DbGeography Location{ get; set; }

        public virtual ICollection<BranchDto> Branches{ get; set; }
    }

そして、これは私がインストーラーを呼び出す方法ですIocConfig.cs:

Container = new WindsorContainer()
                .Install(new AutoMapperInstaller())
                .Install(new ControllersInstaller());

私はそこに含めるべきかどうかわからない

.AddFacility<FactorySupportFacility>()
4

0 に答える 0