代码之家  ›  专栏  ›  技术社区  ›  ali62b

在ef 4中应用当前值

  •  6
  • ali62b  · 技术社区  · 15 年前

    我只是在vs 2010 rc中玩ef 4,发现当属性为bool类型且新值为false时,applycurrentValues不起作用!!!!????
    当新值为真时,它就会工作。
    我不知道这是一个bug还是我遗漏了一些东西,但我只是做了一个非常难看的工作:

    public void UpdateProduct(Product updatedProduct)
        {
            using (model)
            {
                model.Products.Attach(new Product { ProductID = updatedProduct.ProductID });
                model.Products.ApplyCurrentValues(updatedProduct);
                Product originalProduct = model.Products.Single(p => p.ProductID == updatedProduct.ProductID);
                originalProduct.Discontinued = updatedProduct.Discontinued;
                model.SaveChanges();
    
            }
    
        }
    

    有什么主意或者更好的工作吗?

    2 回复  |  直到 12 年前
        1
  •  20
  •   Craig Stuntz    15 年前

    你附加了一个新的 Product 所有bool属性的默认值(false)。然后将这些值之一设置为假。毫不奇怪,它没有更新;你实际上没有更改它!在我看来,您可以通过删除一些代码来解决这个问题:

    public void UpdateProduct(Product updatedProduct)
    {
        using (model)
        {
            Product originalProduct = model.Products.Single(p => p.ProductID == updatedProduct.ProductID);
            model.Products.ApplyCurrentValues(updatedProduct);
            model.SaveChanges();
        }
    }
    

    即使你不喜欢这个,试试看它是否有效。

    在我看来,你首先是想避免装载产品。但是这样做破坏了你的代码。因此,尽管我对尝试“优化”更新提出了疑问(您在这里加载一条记录,更新的频率比选择的要低得多),但还是让我们同意从一些有效的开始。

    如果这可行,它会告诉您如果坚持避免加载产品进行更新,您需要做什么:您需要 mark all properties as modified .

        2
  •  1
  •   halfelf    12 年前

    被改进的:

    public void UpdateProduct(Product updatedProduct)
    {
        using (model)
        {
            model.Products.Single(p => p.ProductID == updatedProduct.ProductID);
            model.Products.ApplyCurrentValues(updatedProduct);
            model.SaveChanges();
        }
    }