2016-10-20 32 views
0

我有一个问题,当我尝试脚手架我的ViewModel。那么......首先要做的事情。我有一个问题,当我尝试创建我的看法,这是这个问题:脚手架创建一个新的DbSet每次我使用它

Error

它发生的确切时间我尝试添加使用列表/详细信息/ etc下的.Net模板的新景观。

那么,这个错误显示后,我花了一些时间来解决它。我发现的解决方案之一是将我的DbSet更改为IDBSet。那么......这是一段时间的工作。但是......在我更换DbSet之后出现了另一个问题,这一次,对于每个使用该模板的脚手架,都会创建一个新的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类

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(); 
    } 
} 

我怎样才能阻止这种自动DbSet创造?我的代码有什么问题?

+1

您在构造函数中不需要'Database.SetInitializer'。设置公共DbSet Estagiarios {get;组; }'as'public virtual DbSet Estagiarios {get;组; }' –

+0

嗯,我尝试了你的建议,但我仍然有同样的老问题,当我尝试使用脚手架创建一个新的视图。 :(http://imgur.com/a/Wlr8x –

回答

0

在您的AutoMapper配置文件中,首先,您应该只有一个构造函数。其次,您只需要调用Profile对象中的基础CreateMap。

不知道你的EF问题,只是想指出在AutoMapper中的问题。

+0

感谢Jimmy提示,我正在考虑这个EF问题,因为DDD架构,我不知道Visual Studio是否可以理解我在做什么。 –

相关问题