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 Update ステートメントを使用せずに可能な回避策はありますか? 可能であれば Entity Framework に固執したいと思います。

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 に答える