zoukankan      html  css  js  c++  java
  • Automapper结合EF实现insert,update方法

    先在global.asax或其他初始化地方初始化要map的几种类的关系,本例中完全通过名字进行匹配,也即对应类中的属性名完全相同:

       AutoMapper.Mapper.Initialize(cfg =>
                {
                    cfg.CreateMap<InvestorModel, WMS_Cust>();
                    cfg.CreateMap<WMS_Cust,InvestorModel>();
                    cfg.CreateMap<InvestorModel,WMS_Cust_Original>();
                    cfg.CreateMap<ContractModel, WMS_Contract>();
                    cfg.CreateMap<WMS_Contract, ContractModel>();
                });     

    在执行更新操作时,需注意使用方法

    public static TDestination Map<TSource, TDestination>(TSource source, TDestination destination);

    对objectContext中的对象属性进行更新,而不能用这个方法

    public static TDestination Map<TSource, TDestination>(TSource source);

    因为这个方法会创建一个新的TSource对象

    具体示例代码如下:

                if (ModelState.IsValid)
                {
    
                    Contract.ContractStatus contractStatus = Contract.ContractStatus.CSR2;
                    using (WMSEntities dbContext = new WMSEntities())
                    {
                        //创建一个新的WMS_Cust对象,然后将invest.Investor的属性复制到该新对象中的对应属性值中
                        WMS_Cust wms_cust = Mapper.Map<InvestorModel, WMS_Cust>(invest.Investor);
                        WMS_Cust oldWms_cust = dbContext.WMS_Cust.Where(o => o.CityIDNo == invest.Investor.CityIDNo).FirstOrDefault();
                        WMS_Contract wms_contract = Mapper.Map<ContractModel, WMS_Contract>(invest.Contract); // new WMS_Contract() { CustID = 0, ProductID = invest.Contract.ProductID, Amount = 100.1m, CollectBankAccount = "aaa", CollectBankID = 1, OperateDate = DateTime.Now, Operator = 1, PayBankAccount = "aaa", PayBankID = 1, ContinueMode = false, ContinueProductID = 1 };
                        //需为本类增加attribute [InitializeSimpleMembership],WebSecurity方可使用
                        wms_contract.Operator = WebSecurity.CurrentUserId;
                        wms_contract.OperateDate = DateTime.Now;
                        wms_contract.State = Contract.ContractStatus.CSR2.ToString();
                        if (oldWms_cust != null)
                        {
                            //将invest.Investor中的属性复制到oldWms_cust中的对应属性值中,oldWms_cust原对象不变
                            Mapper.Map<InvestorModel, WMS_Cust>(invest.Investor, oldWms_cust);
    
                            WMS_Contract oldwms_contract = oldWms_cust.WMS_Contract.Where(o => o.ID == wms_contract.ID).FirstOrDefault();
                            if (oldwms_contract != null)
                            {
                                Mapper.Map<ContractModel, WMS_Contract>(invest.Contract, oldwms_contract);
                                contractStatus=Contract.ContractStatus.ToBeMatch;
                                oldwms_contract.State = contractStatus.ToString();
                            }
                            else
                            {
                                oldWms_cust.WMS_Contract.Add(wms_contract);
                            }
                        }
                        else
                        {
                            dbContext.WMS_Cust.AddObject(wms_cust);
                            WMS_Cust_Original wms_cust_origin = Mapper.Map<InvestorModel, WMS_Cust_Original>(invest.Investor);
                            dbContext.WMS_Cust_Original.AddObject(wms_cust_origin);
                            wms_contract.WMS_Cust = wms_cust;
                            dbContext.WMS_Contract.AddObject(wms_contract);
                        }
                        dbContext.SaveChanges();
    
                    }
                    if (contractStatus == Contract.ContractStatus.CSR2)
                    {
                        return View("Result", new ResultModel() { Title = "录入成功", Message = "录入成功!已提交至复核队列!" });
                    }
                    else
                    {
                        return View("Result", new ResultModel() { Title = "复核成功", Message = "复核成功!已提交至待匹配队列!" });
                    }
                }
  • 相关阅读:
    package相关知识
    【算法设计与分析】5个数7次比较排序的算法
    Android下的应用编程——用HTTP协议实现文件上传功能
    5个数通过7次比较排序的方法
    数据库范式(1NF、2NF、3NF、BCNF)
    HttpDownloader2011年09月20日 写好用于下载的类 并且封装好
    POJ 1692 DP
    POJ 1682 多重DP
    TYVJ 1744 逆序对数(加强版)
    POJ 2151 概率DP
  • 原文地址:https://www.cnblogs.com/Finding2013/p/3144670.html
Copyright © 2011-2022 走看看