zoukankan      html  css  js  c++  java
  • 关于1对n EF数据更新,一个bug记录

    两个类

    public class ProductClass
    {
            public string Name { get; set; }
    
            public IList<ProductClassIntroduction> productClassIntroduction { get; set; }
    }
    
    public class ProductClassIntroduction
    {
            public ProductClass productClass { get; set; }
    
            public string Description { get; set; }
    }

    当我要对ProductClass进行更新时候,一开始我是这样滴:

            new public void Modify(ProductClass entity)
            {
                using (var db = this.NewDB())
                {
                    try
                    {
                        var entry = db.Entry(entity);
                        entry.State = EntityState.Modified;
                        db.SaveChanges();
                    }
                    catch
                    {
                    }
                }
            }

    结果是数据库中ProductClassIntroduction怎么都加不进去,为什么呢?

    当解决问题后我个人看法是这样的:

      List<ProductClassIntroduction>里的数据没有标记更新或者添加标记,就是这个

     EntityState.Modified

    导致其没有更新到本地数据库中。

    但是!你在调试模式时候看ef数据库中是有的,很奇怪。求大神指导。

    就是这里有。但是数据库里没有,而且在ProductClass中也是有数据的

    求指导。

    最后的解决方案是

            new public void Modify(ProductClass entity)
            {
                using (var db = this.NewDB())
                {
                    try
                    {
                        for (int i = 0; i < entity.productClassIntroduction.Count; i++)
                        {
                            var itemEntry = db.Entry<ProductClassIntroduction>(entity.productClassIntroduction[i]);
                            itemEntry.State = EntityState.Added;
                        }
    
                        var entry = db.Entry(entity);
                        entry.State = EntityState.Modified;
                        db.SaveChanges();
                    }
                    catch
                    {
                    }
                }
            }

    这边先将新数据标记为添加。然后对ProductClass进行更新。

  • 相关阅读:
    JavaScript创建块级作用域
    JavaScript数组求最大值 面试题
    JavaScript类数组转换为数组 面试题
    JavaScript实现深拷贝(深复制) 面试题
    javascript洗牌算法 乱序算法 面试题
    3GPP 测试 /etc/udev/ruse.d/50文件 /lib/udev/ruse.d/55* 网络配置
    【网络】TCP/IP连接三次握手
    SVN 使用方法
    Git 使用方法
    LoadRunner性能测试工具
  • 原文地址:https://www.cnblogs.com/FlyStupidBird/p/7066268.html
Copyright © 2011-2022 走看看