• 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, "导入汽车信息不能为空");
            }

  • 相关阅读:
    《数据结构与算法之美》01——系统高效地学习数据结构与算法
    Cookie:SameSite,防止CSRF攻击
    HeadFirst学习笔记-2.观察者(Observer)模式
    HeadFirst学习笔记-1. 设计模式入门
    Redis深入解析系列一:sql与nosql比较
    MySQL优化系列2-索引原理和优化
    MySQL优化系列1-MySQL体系结构
    java集合-ArrayList中EMPTY_ELEMENTDATA与DEFAULTCAPACITY_EMPTY_ELEMENTDATA的区别
    java集合ArrayList中modCount的作用
    java中的System.arraycopy
  • 原文地址:https://www.cnblogs.com/itjeff/p/4959630.html
Copyright © 2020-2023  润新知