• 关于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进行更新。

  • 相关阅读:
    Verilog开发之“新Iverilog工具认识”
    苹果开发之“swift简单按钮加1计数入门”
    基于现有.net core框架模版修改
    Sql50语句小练
    因有个社区:入了一个新的时代!
    .Net Core下建立web应用的 路由器修改
    一个网站的渗透测试思路,流程(给你一个网站,怎么做?)
    windows服务
    我知道的代码生成器
    Extjs 自动列宽
  • 原文地址:https://www.cnblogs.com/FlyStupidBird/p/7066268.html
Copyright © 2020-2023  润新知