【问题标题】:Attach vs fetch on edit在编辑时附加与获取
【发布时间】: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


【解决方案1】:

虽然我不确定“FindByID”,但如果该实体不在当前上下文中,“Find”确实会往返于 db,这与附加不同。但是你是对的,这两个 sn-ps 做的事情完全相同,除了第一个不会往返商店来获取实体。所以我认为没有理由不使用附加方法。

【讨论】:

    猜你喜欢
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多