1

是否可以通过表单更新数据而不将表单绑定到原始表?

我们需要用户更新 SQL 视图映射到的主表中的一小部分数据,下面是用于更新数据的代码示例:

[HttpPost]
public ActionResult Address(AddressView model)
{
    if (ModelState.IsValid)
    {
        TestEntities.AddressView .AddObject(model);
        TestEntities.SaveChanges();

        return Redirect("/Customer?id=" + model.id);
    }

    return View(model);
}

不幸的是,由于视图不能包含主键,因此在尝试更新数据时出现以下错误:

无法更新 EntitySet 'AddressView',因为它有一个 DefiningQuery 并且元素中不存在支持当前操作的元素。

在不使用典型的 SQL 更新语句的情况下是否有可能的解决方法,如果可能的话,我想坚持使用实体框架。

4

1 回答 1

0

这是我的工作,本质上是使用初始视图中的数据将数据呈现给模型,然后将数据映射到包含主键的实际表(在初始视图中使用):

public ActionResult Customer(int id)
{
    var viewModel = new Customer();

    using (var testEntities = new TestEntities(new EntityConnection(StrEntities)))
    {
        var model = testEntities.CustomerView.Single(m => m.id == id);

        viewModel.id = id;
        viewModel.address_1 = model.address_1;
        viewModel.address_2 = model.address_2;
        viewModel.post_code = model.post_code;
    }

    return View("Customer", viewModel);
}

[HttpPost]
public ActionResult Address(Address viewModel)
{
    if (ModelState.IsValid)
    {
        using (var testEntities = new TestEntities(new EntityConnection(StrEntities)))
        {
            var model = testEntities.AddressTable.Single(m => m.id == viewModel.id);

            model.address_1 = viewModel.address_1;
            model.address_2 = viewModel.address_2;
            model.post_code = viewModel.post_code;

            testEntities.SaveChanges();
        }

        return Redirect("/Customer?id=" + viewModel.id);
    }

    return View(viewModel);
}

希望这对其他人有用:-)

于 2015-03-17T09:11:38.240 回答