在编辑时附加vs fetch

时间:2016-06-27 20:04:41

标签: c# .net asp.net-mvc entity-framework

假设我有Product模型,看起来像这样:

public class Product
{
    public int ID { get; set; }
    [Required]
    public string Name { get; set; }
    public string Description { get; set; }
    public double Price { get; set; }

    public virtual Category Category { get; set; }
}

例如,用户只能更改Price字段。所以我有这个viewmodel:

public class ProductViewModel
{
    public int ID { get; set; }
    public double Price { get; set; }
}

现在,当我在控制器中收到这个viewmodel时,可以这样做:

            var updatedProduct = new Product { ID = product.ID };
            db.Products.Attach(updatedProduct);

            updatedProduct.Price= product.Price;

            await db.SaveChangesAsync();

或者我应该获取它然后像这样更改它:

            var updatedProduct = dbo.Products.FindByID(product.ID);

            updatedProduct.Name = product.Name;
            updatedProduct.Description = product.Description;

            await db.SaveChangesAsync();

我看到Microsoft在自动生成CRUD时使用第二种方法。但是附加意味着一次减少db往返。我有什么理由不使用它吗?

1 个答案:

答案 0 :(得分:0)

虽然我不确定“FindByID”,但是如果该实体不在当前上下文中,“Find”确实会向db进行往返,这与attach不同。但是你是正确的两个片段完全相同的事情,除了第一个不会到商店往返获取实体。所以我认为没有理由不使用附加approch。