2016-10-20 5 views
0

私のViewModelを足場にしようとすると問題があります。まあ...最初のものが最初です。私は一覧/詳細は/ etcの.NETのテンプレートを使用して新しいビューを追加しようとするScaffoldingは私がそれを使用するたびに新しいDbSetを作成します

Error

それはまさに起こる:私は私のビューを作成しようとすると、私は別の問題を抱えていた、それがこの問題でした。

このエラーが表示されてから、それを解決するまでに時間がかかりました。私が見つけた解決策の1つは、私のDbSetをIDBSetに変更することです。まあ...それはしばらくの間働いた。しかし...私は私のDbSetを変更した後、別の問題が現れました。今回は、テンプレートを使用しているScaffoldingごとに新しいDbSetが作成されます。

DbSet autocreated

私はDDDの勉強をしていました... ...まあ、私のコードは、すぐ下には以下となります。

public class ProjetoDeEstudoContexto : DbContext 
{ 
    public ProjetoDeEstudoContexto() 
     : base("ProjetoDeEstudoContext") 
    { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<ProjetoDeEstudoContexto, Configuration>()); 
    } 

    public DbSet<Estagiario> Estagiarios { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
     modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); 

     modelBuilder.Properties<string>().Configure(p => p.HasColumnType("varchar")); 
     modelBuilder.Properties<string>().Configure(p => p.HasMaxLength(150)); 

     //Configuration cria a tabela de acordo com os parametros da classe Config. 
     modelBuilder.Configurations.Add(new EstagiarioConfig()); 
    } 
} 

public class EstagiarioConfig : EntityTypeConfiguration<Estagiario> 
{ 
    public EstagiarioConfig() 
    { 
     HasKey(e => e.EstagiarioId); 
     Property(n => n.Nome).IsRequired().HasMaxLength(150); 
     Property(n => n.Sobrenome).IsRequired().HasMaxLength(150); 
    } 
} 

public class Estagiario 
{ 
    public int EstagiarioId { get; set; } 
    public string Nome { get; set; } 
    public string Sobrenome { get; set; } 
    public DateTime? DataDeInicio { get; set; } 
    public DateTime? DataDeTermino { get; set; } 
} 

public class EstagiarioViewModel 
{ 
    [Key] 
    public int EstagiarioId { get; set; } 

    [Required(ErrorMessage = "Preencha o campo Nome")] 
    [MaxLength(150, ErrorMessage = "Máximo {0} caracteres")] 
    [MinLength(2, ErrorMessage = "Minimo {0} caracteres")] 
    public string Nome { get; set; } 

    [Required(ErrorMessage = "Preencha o campo Nome")] 
    [MaxLength(150, ErrorMessage = "Máximo {0} caracteres")] 
    [MinLength(2, ErrorMessage = "Minimo {0} caracteres")] 
    public string Sobrenome { get; set; } 

    [ScaffoldColumn(false)] 
    public DateTime? DataDeInicio { get; set; } 

    [ScaffoldColumn(false)] 
    public DateTime? DataDeTermino { get; set; } 
} 

マイAutoMapperクラスIは、この自動DbSetの作成を中止するにはどうすればよい

public static void RegisterMappings() 
{ 
    Mapper.Initialize(x => 
    { 
     x.AddProfile<DomainToViewModelMappingProfile>(); 
     x.AddProfile<ViewModelToDomainMappingProfile>(); 
    }); 
} 

public class DomainToViewModelMappingProfile : Profile 
{ 
    private MapperConfiguration mapConfig; 
    public override string ProfileName => "DomainToViewModelMapping"; 

    protected override void Configure() 
    { 
     mapConfig = new MapperConfiguration(cfg => 
     { 
      cfg.CreateMap<Estagiario, EstagiarioViewModel>(); 
     }); 
    } 
} 

public class ViewModelToDomainMappingProfile : Profile 
{ 
    private MapperConfiguration mapConfig; 
    public override string ProfileName => "ViewModelToDomainMapping"; 
    protected override void Configure() 
    { 
     mapConfig = new MapperConfiguration(cfg => 
     { 
      cfg.CreateMap<EstagiarioViewModel,Estagiario>(); 
     }); 
    } 
} 

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     AutoMapperConfig.RegisterMappings(); 
    } 
} 

?私のコードで何が間違っていますか?

+1

コンストラクタに 'Database.SetInitializer'は必要ありません。 'public DbSetを設定する Estagiarios {get;セット; } '' 'として公開仮想DbSet Estagiarios {get;セット; } ' –

+0

あなたの提案をお試しいただきましたが、足場を使って新しいビューを作成しようとすると、私は同じ古い問題を抱えています。 :(http://imgur.com/a/Wlr8x –

答えて

0

AutoMapperのプロファイルでは、まずコンストラクタのみを用意してください。次に、Profileオブジェクトの基本CreateMapを呼び出すだけです。

あなたのEFの問題については考えていませんが、AutoMapperの問題を指摘したいだけです。

+0

チップJimmyに感謝します。私はこのEF問題について考えています。なぜなら、DDDアーキテクチャはVisual Studioが自分のしていることを理解できるかどうかわかりません。 –

関連する問題

 関連する問題