惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
Intezer
V
Vulnerabilities – Threatpost
Google Online Security Blog
Google Online Security Blog
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
AWS News Blog
AWS News Blog
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cybersecurity and Infrastructure Security Agency CISA
N
News | PayPal Newsroom
T
Tenable Blog
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Secure Thoughts
P
Privacy International News Feed
IT之家
IT之家
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
博客园_首页
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
NISL@THU
NISL@THU
I
InfoQ
D
DataBreaches.Net
有赞技术团队
有赞技术团队
K
Kaspersky official blog
Security Latest
Security Latest
The Register - Security
The Register - Security
Hugging Face - Blog
Hugging Face - Blog
S
Security @ Cisco Blogs
P
Proofpoint News Feed
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
AI
AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic

博客园 - 赶路人之刚出发

集成WebSecurity的Authorize进行身份验证时,数据库连接报错问题 Html.ActionLink传递参数 MVC中使用RemoteAttribute异步远程验证 Html.RenderPartial WebMatrix.WebSecurity创建自定义用户属性 强类型view中List<Model〉问题 ViewBag任意属性的实现方法 params关键字 配置LINQ中的datacontext的log路径,以记录datacontext执行了的查询sql SortedList LINQ join/left join/cross join/group by/group join/sortedlist/cast Linq to objects示例 yield return 和 Func Lamda表达式 IDisposable 匿名类型与扩展方法 对象初始化器和集合初始化器 C#自动属性 .net random伪随机数
Automapper结合EF实现insert,update方法
赶路人之刚出发 · 2013-06-19 · via 博客园 - 赶路人之刚出发

先在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 = "复核成功!已提交至待匹配队列!" });
                }
            }