Asp.net 如何以及在何处将viewmodel连接到dbcontext

Asp.net 如何以及在何处将viewmodel连接到dbcontext,asp.net,asp.net-mvc,entity-framework,viewmodel,.net-4.5,Asp.net,Asp.net Mvc,Entity Framework,Viewmodel,.net 4.5,我继承了一个mvc应用程序。此应用程序首先使用实体框架和数据库。它没有viewmodels和ViewBag,到处都是下拉列表和错误消息。现在,我的任务是对它进行许多更改,因为您无法验证主类之外的相关属性 我正在尝试创建viewmodel,以便只显示必要的数据、验证数据,而不直接链接到模型。到目前为止,使用我创建的viewmodel,表单上的所有字段都为null。我曾尝试使用automapper,但出现映射错误:“缺少类型映射配置或不支持映射” 以下是控制器的一部分: public Action

我继承了一个mvc应用程序。此应用程序首先使用实体框架和数据库。它没有viewmodels和ViewBag,到处都是下拉列表和错误消息。现在,我的任务是对它进行许多更改,因为您无法验证主类之外的相关属性

我正在尝试创建viewmodel,以便只显示必要的数据、验证数据,而不直接链接到模型。到目前为止,使用我创建的viewmodel,表单上的所有字段都为null。我曾尝试使用automapper,但出现映射错误:“缺少类型映射配置或不支持映射”

以下是控制器的一部分:

 public ActionResult ChangeOwner(int id = 0)
    {
        var combine = new combineValidationAssetViewModel();
        Mapper.CreateMap<ToolingAppEntities1, combineValidationAssetViewModel>();
        Mapper.CreateMap<combineValidationAssetViewModel, ToolingAppEntities1>();

       Asset asset = db.Assets.Find(id);
       Mapper.Map(combine, asset, typeof(combineValidationAssetViewModel), typeof(Asset));
以下是视图模型的一部分:

  public class combineValidationAssetViewModel
{

    public Asset Assets { get; set; }
    public Transaction Transactions { get; set; }
    public LocationType LocationTypes { get; set; }
    public ToolType ToolTypes { get; set; }
    public OwnerType OwnerTypes { get; set; }
    public int AssetId { get; set; }
    public int fkToolTypeId { get; set; }


    [Required]
    [Display(Name = "Owner")]
    public int fkOwnerId { get; set; }
    [Required]
    [Display(Name = "Location")]
    public int fkLocationId { get; set; }
    public int LocationTypeId { get; set; }
    public int OwnerTypeId { get; set; }
以下是部分视图:

 @model ToolApp.ViewModels.combineValidationAssetViewModel

其次是许多包括


如有任何建议,我们将不胜感激。

如果您选择了错误的方向:

Mapper.Map(combine, asset,
           typeof(combineValidationAssetViewModel), typeof(Asset));
这将空的
组合
对象映射到
资产
。您应该将其反转,并使用强类型(通用)重载:

var combine = Mapper.Map<combineValidationAssetViewModel>(asset);
var combine=Mapper.Map(资产);

你究竟为什么在控制器操作中调用
Mapper.CreateMap
?每个AppDomain只能定义一次AutoMapper映射,在ASP.NET MVC应用程序中,这显然是您的
应用程序\u Start
方法。请添加ChangeOwner操作的其余部分,以便我们可以看到返回的内容。因为我是初学者,不确定将其放置在何处。我在一些例子中看到了这一点,但没有什么可与之相比。这就是我问这个问题的原因。感谢您的回复。我添加了changeowner ActionResults的最后一部分感谢您的建议,我创建此viewmodel是为了将验证添加到原始开发人员遗漏的一些字段中,因为它是使用视图模型构建的。此viewmodel需要5个数据库集。如何组合它们以自动映射?当我尝试您建议的方法时,出现了一个错误:请参阅下一个注释异常是:缺少类型映射配置或不支持的映射。映射类型:HashSet
1->Transaction System.Collections.Generic.HashSet
1[[ToolingApplication.Transaction,ToolingApplication,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]->ToolingApplication.Transaction目标路径:combineValidationAssetViewModel.Transactions.Transactions源值:System.Collections.Generic.HashSet`1[ToolingApplication.Transaction]事务是将集合映射到标量属性(如
公共事务事务事务
)的DBSetSY之一。视图模型中的属性必须是
IEnumerable
。实际上,您需要TransactionViewModel,因为您无法在EF LINQ查询中创建实体类型。
{ private ToolingAppEntities1 db = new ToolingAppEntities1();
Mapper.Map(combine, asset,
           typeof(combineValidationAssetViewModel), typeof(Asset));
var combine = Mapper.Map<combineValidationAssetViewModel>(asset);