仅保存没有实体框架的更改

时间:2013-12-20 18:55:26

标签: asp.net-mvc asp.net-mvc-4

我的数据集有一个简单的编辑表单,我想知道是否可以只保存文本框..依此类推......我真的改变了。

我没有将EF用于我的MVC应用程序,现在我希望这不是错误的决定。

    <fieldset>
    <legend>Product Informations</legend>

    <div>@Html.LabelFor(model => model.Product.Id, "Product Id")</div>
    <div>@Html.TextBoxFor(model => model.Product.Id, new { @readonly = "readonly" })</div>

    <div>@Html.LabelFor(model => model.Product.Name, "Product Name")</div>
    <div>@Html.TextBoxFor(model => model.Product.Name, new { @readonly = "readonly" })</div>

    <div>@Html.LabelFor(model => model.Product.ProductInformation.GeneralDescription, "General Description")</div>
    <div>@Html.TextBoxFor(model => model.Product.ProductInformation.GeneralDescription)</div>

    <input type="submit" value="Edit" />

</fieldset>

2 个答案:

答案 0 :(得分:1)

您的帖子没有说明您如何访问您的数据,其他“不使用”EF“。您需要使用某种数据访问框架; ADO,EF,NHibernate等。因为您使用的是MVC建议使用实体框架。

答案 1 :(得分:0)

我没有看到数据访问策略是否与调用“更新方法”有关。假设您使用EF 。在控制器内部,您仍然需要在模型和业务对象/实体之间传输数据,然后决定是否设置EntityState.Modified。如果您使用的是存储库,则可以使用更新的标志。也许这是在控制器中,或者您可能将逻辑放在业务实体中并使其自行更新。例如,如果您正在使用存储库/ UofW并将“更新”逻辑放在控制器中,它可能看起来像:

    using (UnitOfWork work = new UnitOfWork())
    {
        IProductFactory factory = work.ProductFactory;
        Product product = factory.GetByID(model.Id);
        product.Name = model.Name;

        // TO UPDATE OR NOT?  THAT IS THE QUESTION
        factory.Update(expected);
        work.Save();
    }

你需要某种旗帜来帮助:

    using (UnitOfWork work = new UnitOfWork())
    {
        bool updated = true;
        IProductFactory factory = work.ProductFactory;
        Product product = factory.GetByID(model.Id);
        if(product.Name != model.Name)
        {
            product.Name = model.Name;
            updated = true;
        }

        // TO UPDATE OR NOT?  THAT IS THE QUESTION
        if(updated)
        {
          factory.Update(expected);
          work.Save();
        }
    }