假设我有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往返。我有什么理由不使用它吗?
答案 0 :(得分:0)
虽然我不确定“FindByID”,但是如果该实体不在当前上下文中,“Find”确实会向db进行往返,这与attach不同。但是你是正确的两个片段完全相同的事情,除了第一个不会到商店往返获取实体。所以我认为没有理由不使用附加approch。