EF 4中的ApplyCurrentValues

ali*_*62b 6 .net entity-framework visual-studio-2010

我刚刚在VS 2010 RC中玩EF 4,刚发现当属性类型为bool并且新值为false时,ApplyCurrentValues不起作用!!!
并且它在新值为真时起作用.
我不知道这是一个错误还是我错过了一些东西,但我只是在处理一个非常丑陋的工作:

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();

        }

    }
Run Code Online (Sandbox Code Playgroud)

任何想法或更好的解决方案?

Cra*_*ntz 20

Product使用所有bool属性的默认值附加了一个新值(false).然后,您将其中一个值设置为false.毫不奇怪,它没有更新; 你还没有真正改变它!在我看来,您可以通过删除一些代码来解决这个问题:

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

即使你不喜欢这样,试试看它是否有效.

在我看来,你正试图避免首先加载产品.但这样做会破坏你的代码.因此,虽然我质疑尝试"优化"更新(你在这里加载一条记录,并且更新发生的次数少得多,然后选择),让我们同意从一些有用的东西开始.

如果这样做,它会告诉您如果您坚持避免加载产品以进行更新需要执行的操作:您需要将所有属性标记为已修改.

  • 修复了我的问题http://stackoverflow.com/questions/2264313/entity-framwork-4-not-always-updating-boolean-property-using-applycurrentvalues. (2认同)