1

FlatSessie オブジェクトのリストを返すフォームがあります

私の編集ビューでは、いくつかの FlatSessie を編集し、それらをその List オブジェクトの Post メソッドに返します。

私のDBにはSessiesがあり、Automapperを使用してFlatSessieにマッピングして戻します

今、私はlinqを取得してDBを更新することができません。

コード:

    [HttpPost]
    public ActionResult Sessies(int id, int? modID, int? projID, string schooljaarparam, List<FlatSessie> sl) {
        if (ModelState.IsValid) {
            foreach (FlatSessie s in sl) { //i run over all FlatSessies which i get
                Models.Sessies ses = Mapper.Map<FlatSessie, Sessies>(s); // i map them to the Sessies object
                List<Sessies> origReeks = _db.Sessies.Where(p => p.Ses_ID == ses.Ses_ID).ToList(); //i get the original Session by ID. if there is a Session with that ID, if not (the ID will be 0) i do an Insert. if there is i want to do an Update.

                if (origReeks.Count > 0) {
                    //it's an update
                    UpdateModel(origReeks.First(); //doesnt work
                    //_db.Sessies.Attach(ses, origReeks.First()); //doesnt work, gives me an error on used ID...
                    _db.SubmitChanges();
                } else {
                    //no sessies yet, add them, this works.
                    _db.Sessies.InsertOnSubmit(ses);
                    _db.SubmitChanges();
                }
            }
            TempData["okmsg"] = "De sessies zijn opgeslagen";
            return RedirectToAction("Index");
        }

        //if not valid, i return the viewdata which i need.

        Module m = _db.Modules.First(md => md.Mod_ID == modID.Value);
        int antses = m.Mod_AantalSessies.Value;

        List<List<SelectListItem>> lpllst = new List<List<SelectListItem>>(antses);


        for (int i = 0; i < antses; i++) {
            lpllst.Add(MvcApplication.lesplaatsList(schooljaarparam, -1));
        }

        ViewData["lesplist"] = lpllst;
        ViewData["lglist"] = MvcApplication.lesgeverList();

        return View(sl);
    }
4

1 に答える 1

1

オブジェクトにマップするプロパティを認識できるように、 UpdateModel ( 、 n は問題のモデル要素の実際の入力名と一致するようなもの) にプレフィックスを提供すると機能する場合がありますが、これらのリストを取得しているためです。FlatSessie[n]そうではないかもしれません。FlatSessie一致するオブジェクトからのデータを直接使用して、取得したモデルを更新しようとしましたか?

また、これが機能するようになったら、すべての挿入/更新 (ループ外) に対して単一の SubmitChanges を実行して、送信全体を単一のトランザクションにラップすることをお勧めします。これにより、エラーが発生した場合に修正して再送信することが容易になります。これは、いくつかの変更が既にコミットされていないため、さらにエラーが発生する可能性があるためです。

于 2010-03-16T15:37:01.413 に答える