Copy 复制功能

在实际项目中,经常需要数据添加的时候 能够直接copy 有的数据 稍微做一些修改就可以完成新的数据使用。

那么copy功能如何 实现?

其实非常简单:分为俩个部分

1:被复制的源数据查询出来(根据id) 2:将内容进行添加 (只需要将一些不能相同的列如code id这些稍微改动一下)

操作: 查找数据源

将一些需要的表数据查出来   代理属性关闭也是ok的

   public TourPackage GetCopyPackageByPackageId(int id)
        {
            //DbContext.Configuration.ProxyCreationEnabled = false;
            var package = DbContext.TourPackageList
                .Include(t => t.DealTypes)
                .Include(t => t.TourPackageAirlines)
                .Include(t => t.TourPackageRoutings)       
                .Include(t => t.TourPackagePromotions)
                .Include("TourPackageItineraries.ItineraryFeatureHotelList")
                .Include("TourPackageItineraries.ItineraryOptionaTourlList")
                .Include("TourPackageItineraries.ItineraryMealList")                  
                .AsNoTracking().FirstOrDefault(t => t.Id == id);
            //DbContext.Configuration.ProxyCreationEnabled = true;
            return package;
        }

自己想测试一下 不去inclued 直接 将主表查的时候 用导航延迟属性直接带出来 直接 add岂不是更快

public TourPackage GetCopyPackageByPackageIds(int id)
        {

            var package = DbContext.TourPackageList
                .AsNoTracking().FirstOrDefault(t => t.Id == id);

            return package;
        }

但是发现如果不调试进行操作会出现 从表数据丢失的情况  

解析:虽然使用了导航属性 但是从表对象 只有使用过一次 才会被数据库所知道,一次没使用 跟没有是一样的

 public TourPackage GetCopyPackageByPackageIds(int id)
        {

            var package = DbContext.TourPackageList.AsNoTracking().SingleOrDefault(t => t.Id == id);
            var a = package.TourPackageItineraries; //需要点一下这个从表属性  让数据库知道有这个带出来的数据要用
            var b = package.TourPackageSeries; //所以说定义一个对象 只是为了说明一下我这个对象要用带出来一下让数据库识别
           
            return package;
        }

 

查出数据源之后就好办了  直接 add 这个对象 需要的内容都有了

 public Boolean CopyPackage(TourPackage package)
        {
            bool isSuccess=false;
            if (package == null) return isSuccess;
            using (var trans = DbContext.Database.BeginTransaction())
            {
                try
                {
                     DbContext.TourPackageList.Add(package);
                    DbContext.SaveChanges();
                    trans.Commit();
                    isSuccess = true;
                    
                }
                catch (Exception e)
                {
                    isSuccess = false;
                    trans.Rollback();
                }
            }
            return isSuccess;
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值