zoukankan      html  css  js  c++  java
  • EF中的transaction的使用范例

    注意一点:

    在EF中使用事物后,对于一个新增的model,在saveChanges后,可以得到该实体的自增ID,但在提交事物之前,

    该数据并没有真正的新增到DB中,但此时可以得到model新增的自增ID,程序中可以使用,很方便!

    例如下面的series实体在新增时,下面新增level时就可以直接使用,但此时的series并没有真正的新增到db中。

    /// <summary>
            /// 导入汽车维护数据
            /// </summary>
            /// <param name="BrandName"></param>
            /// <returns></returns>
            public static Result ImportVehicleData(string strDataTable)
            {
                DataTable dt = JsonHelper.Deserialize<DataTable>(strDataTable);
                if (dt != null)
                {
                    using (Entities db = new Entities())
                    {
                        using (TransactionScope transaction = new TransactionScope())
                        {
                            try
                            {
                                var brandList = db.TL_Sys_VehicleBrand.ToList();
                                var seriesList = db.TL_Sys_VehicleSeries.ToList();
                                var levelList = db.TL_Sys_VehicleLevel.ToList();

                                string brandName = "";
                                string seriesName = "";
                                string levelName = "";
                                bool isInterest = true;
                                bool isDefault = true;

                                TL_Sys_VehicleBrand brand = new TL_Sys_VehicleBrand();
                                TL_Sys_VehicleSeries series = new TL_Sys_VehicleSeries();
                                bool isSave = false;
                                foreach (DataRow dr in dt.Rows)
                                {
                                    brandName = dr[0].ToString().Trim();
                                    isInterest = dr[3].ToString().Trim() == "否" ? false : true;
                                    isDefault = dr[4].ToString().Trim() == "否" ? false : true;
                                    brand = brandList.Where(p => p.Name == brandName).FirstOrDefault();

                                    seriesName = dr[1].ToString().Trim();
                                    series = seriesList.Where(p => p.CarBrandID == brand.ID && p.Name.Trim().Replace(" ", "") == seriesName.Trim().Replace(" ", "")).FirstOrDefault();
                                    if (series == null)
                                    {
                                        series = new TL_Sys_VehicleSeries();
                                        //新增车辆车系
                                        series.CarBrandID = brand.ID;
                                        series.Name = seriesName;
                                        series.Code = GetVehicleSeriesNextCode(brand, seriesList);
                                        series.IsInterest = isInterest;
                                        series.IsDefault = isDefault;
                                        db.TL_Sys_VehicleSeries.Add(series);
                                        db.SaveChanges();
                                        seriesList.Add(series);
                                    }

                                    levelName = dr[2].ToString().Trim();
                                    if (!string.IsNullOrWhiteSpace(levelName) && series != null && series.ID > 0)
                                    {
                                        var level = levelList.Where(p => p.CarLineID == series.ID && p.Name.Trim().Replace(" ", "") == levelName.Trim().Replace(" ", "")).FirstOrDefault();
                                        if (level == null)
                                        {
                                            level = new TL_Sys_VehicleLevel();
                                            //新增车辆车型
                                            level.CarLineID = series.ID;
                                            level.Name = levelName;
                                            level.Code = GetVehicleLevelNextCode(series, levelList);
                                            level.IsInterest = isInterest;
                                            level.IsDefault = isDefault;
                                            db.TL_Sys_VehicleLevel.Add(level);
                                            //db.SaveChanges();
                                            isSave = true;

                                            levelList.Add(level);
                                        }
                                    }
                                }
                                //如果有新增的车型,就一起保存数据库
                                if (isSave)
                                {
                                    db.SaveChanges();
                                }

                                transaction.Complete();
                                return new Result(true, "导入成功");
                            }
                            catch(Exception er)
                            {
                                transaction.Dispose();
                                return new Result(false, "导入发生异常," + er.ToString());
                            }
                        }
                    }
                }
                return new Result(false, "导入汽车信息不能为空");
            }

  • 相关阅读:
    【Java EE 学习 81】【CXF框架】【CXF整合Spring】
    【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】
    【Java EE 学习 80 上】【WebService】
    【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
    【Java EE 学习 79 上】【mybatis 基本使用方法】
    【Java EE 学习 78 下】【数据采集系统第十天】【数据采集系统完成】
    【Java EE 学习 78 中】【数据采集系统第十天】【Spring远程调用】
    【Java EE 学习 78 上】【数据采集系统第十天】【Service使用Spring缓存模块】
    【Java EE 学习 77 下】【数据采集系统第九天】【使用spring实现答案水平分库】【未解决问题:分库查询问题】
    【Java EE 学习 77 上】【数据采集系统第九天】【通过AOP实现日志管理】【通过Spring石英调度动态生成日志表】【日志分表和查询】
  • 原文地址:https://www.cnblogs.com/itjeff/p/4959630.html
Copyright © 2011-2022 走看看