【发布时间】:2016-06-27 20:04:40
【问题描述】:
假设我有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 字段。所以我有这个视图模型:
public class ProductViewModel
{
public int ID { get; set; }
public double Price { get; set; }
}
现在,当我在控制器中收到此视图模型时,是否可以执行以下操作:
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();
我看到微软在自动生成 CRUD 时使用了第二种方法。但是附加意味着少一个数据库往返。我有什么理由不使用它吗?
【问题讨论】:
-
附加是当数据库中已经存在一个项目而不是当你添加一个新项目时。
标签: c# .net asp.net-mvc entity-framework