C# 将ViewModel映射到相关实体

C# 将ViewModel映射到相关实体,c#,asp.net-mvc,mapping,asp.net-mvc-viewmodel,C#,Asp.net Mvc,Mapping,Asp.net Mvc Viewmodel,我有一个具有多个属性的ViewModel(VM用于多步骤向导): public类CallViewModel { [关键] [第列(顺序=0)] [HiddenInput(DisplayValue=false)] public System.Guid CallID{get;set;} [必需,显示(Name=“通话日期”)] [数据类型(DataType.Date)] [DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:dd

我有一个具有多个属性的ViewModel(VM用于多步骤向导):

public类CallViewModel
{
[关键]
[第列(顺序=0)]
[HiddenInput(DisplayValue=false)]
public System.Guid CallID{get;set;}
[必需,显示(Name=“通话日期”)]
[数据类型(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:dd-MM-yyyy}Γ。”)]
public System.DateTime CallDate{get;set;}
[必需,显示(Name=“合同编号”)]
公共字符串编号{get;set;}
[显示(Name=“采样日期”),数据类型(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:dd-MM-yyyy}Γ。”)]
public System.DateTime SampleActDate{get;set;}
[显示(Name=“合同日期”)、数据类型(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:dd-MM-yyyy}Γ。”)]
public System.DateTime合同日期{get;set;}
[必需,显示(Name=“成本效率,%”)
公共十进制成本效率{get;set;}
[必需,显示(Name=“文档类型”)]
公共字符串调用名{get;set;}
//代表
[必需,显示(Name=“Second Name”)]
公共字符串RepFamilyName{get;set;}
[必需,显示(Name=“First Name”)]
公共字符串RepFirstName{get;set;}
[必需,显示(Name=“Middle Name”)]
公共字符串RepMidName{get;set;}
[必需,显示(Name=“Position”)]
公共字符串重新定位{get;set;}
[必需,显示(Name=“Document”)]
公共字符串DocType{get;set;}
[必需,显示(Name=“Phone(#####)##-#-#])
[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:(#######-##-##])]
公共字符串RepPhoneNumber{get;set;}
//顾客
[必需,显示(Name=“justicial Status”)]
公共字符串JudicialStatus{get;set;}
[必需,显示(Name=“Customer Name”)]
公共字符串CustomerName{get;set;}
[必需,显示(Name=“Address”)]
公共字符串CustomerAddress{get;set;}
[必需,显示(Name=“TaxID”)]
公共字符串TaxID{get;set;}
[显示(Name=“BIC”)]
公共字符串BIC{get;set;}
[必需,显示(Name=“电话号码(####)###-#-#”)]
[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:(#######-##-##])]
公共字符串CustomerPhoneNumber{get;set;}
[必需,显示(Name=“OKPO”)]
公共int-OKPO{get;set;}
[必需,显示(Name=“Account)]
公共字符串CustomerBankAccount{get;set;}
[必需,显示(Name=“银行分行”)]
公共字符串BankBranch{get;set;}
[必需,显示(Name=“银行地址”)]
公共字符串BranchAddress{get;set;}
[显示(名称=“银行代码”)]
公共可为空的银行代码{get;set;}
[显示(Name=“手机号码”)]
公共字符串MPhoneNumber{get;set;}
//人
[必需,显示(Name=“Expert”)]
//公共字符串Exp{get;set;}
公共Guid ExpID{get;set;}
[必需,显示(姓名=“宣誓书编号”)]
公共int宣誓书num{get;set;}
[必需,显示(姓名=“宣誓书日期”),
数据类型(DataType.Date)]
public System.DateTime宣誓日期{get;set;}
公共列表项列表{get{return\u items;}}
私有列表_items=新列表();
公共类ItemClass
{//项目
公共Guid ItemID{get;set;}
[必需,显示(Name=“Item SubType”)]
公共Guid项子类型{get;set;}
[必需,显示(Name=“Item Name”)]
公共字符串ItemName{get;set;}
[必需,显示(Name=“Producer”)]
公共字符串ItemProducer{get;set;}
[必需,显示(Name=“数量”)]
公共int ItemQty{get;set;}
[显示(Name=“Additionals”)]
公共字符串附加{get;set;}
[必需,显示(Name=“Program Name”)]
公共字符串ProgramNameShort{get;set;}
[必需,显示(Name=“计算日期”)]
公共字符串calcDate{get;set;}
[必需,显示(Name=“计算编号”)]
公共字符串calcNum{get;set;}
}
}
我还有几个具有1:n关系的实体,如

public partial class Call
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Call()
    {
        this.CallDetails = new HashSet<CallDetail>();
    }

    public System.Guid CallID { get; set; }
    public System.DateTime CallDate { get; set; }
    public System.Guid CustomerID { get; set; }
    public string DocNumber { get; set; }
    public int AffidavitNum { get; set; }
    public System.DateTime AffidavitDate { get; set; }
    public System.DateTime ContractDate { get; set; }
    public int CallStatus { get; set; }
    public string DocType { get; set; }
    public Nullable<decimal> Cost_Efficiency { get; set; }
    public System.DateTime SampleActDate { get; set; }
    public string CallName { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<CallDetail> CallDetails { get; set; }
    public virtual Customer Customer { get; set; }
}
公共部分类调用
{
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2214:DoNotCallOverridableMethodsInConstructors”)]
公众电话()
{
this.CallDetails=new HashSet();
}
public System.Guid CallID{get;set;}
public System.DateTime CallDate{get;set;}
public System.Guid CustomerID{get;set;}
公共字符串DocNumber{get;set;}
公共int宣誓书num{get;set;}
public System.DateTime宣誓日期{get;set;}
public System.DateTime合同日期{get;set;}
public int CallStatus{get;set;}
公共字符串DocType{get;set;}
公共可为空的成本效率{get;set;}
public System.DateTime SampleActDate{get;set;}
公共字符串调用名{get;set;}
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2227:CollectionPropertiesShouldBreadOnly”)]
公共虚拟ICollection调用详细信息{get;set;}
公共虚拟客户客户{get;set;}
}

public分部类CallDetail
{
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2214:DoNotCallOverridableMethodsInConstructors”)]
公共CallDetail()
{
this.Orders=new HashSet();
}
public System.Guid CallID{get;set;}
public System.Guid ItemID{get;set;}
公共int ItemQty{get;set;}
公共十进制ItemTestCost{get;set;}
public System.Guid程序ID{get;set;}
公共虚拟调用{get;set;}
公共虚拟项项{get;set;}
公共虚拟程序程序{get;set;}
public partial class Call
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Call()
    {
        this.CallDetails = new HashSet<CallDetail>();
    }

    public System.Guid CallID { get; set; }
    public System.DateTime CallDate { get; set; }
    public System.Guid CustomerID { get; set; }
    public string DocNumber { get; set; }
    public int AffidavitNum { get; set; }
    public System.DateTime AffidavitDate { get; set; }
    public System.DateTime ContractDate { get; set; }
    public int CallStatus { get; set; }
    public string DocType { get; set; }
    public Nullable<decimal> Cost_Efficiency { get; set; }
    public System.DateTime SampleActDate { get; set; }
    public string CallName { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<CallDetail> CallDetails { get; set; }
    public virtual Customer Customer { get; set; }
}
public partial class CallDetail
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public CallDetail()
    {
        this.Orders = new HashSet<Order>();
    }

    public System.Guid CallID { get; set; }
    public System.Guid ItemID { get; set; }
    public int ItemQty { get; set; }
    public decimal ItemTestCost { get; set; }
    public System.Guid ProgramID { get; set; }

    public virtual Call Call { get; set; }
    public virtual Item Item { get; set; }
    public virtual Program Program { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Order> Orders { get; set; }
}
public class ModelClass
{
    public Guid Id { get; set; }

    public ChildModel ChildModel { get; set; }
}

public class ViewModelClass
{
    public Guid Id { get; set; }

    public ChildModel ChildModel { get; set; } = new ChildModel();
}

public class ChildModel
{
    public Guid Id { get; set; }
}
    [HttpPost] 
    public ActionResult Create (CallViewModel callViewModel) {
        var model = new ModelClass;

        model.Id = callViewModel.Id;
        model.ChildModel = callViewModel.ChildModel;

        _context.Add(model);
        _context.SaveChanges();

        return RedirectToAction("Index");
    }