0

Tabloオブジェクトへの参照を持つオブジェクトがありRessamます。の編集アクションで、参照もTablo変更できるようにしたい、つまり別のを参照したい。これがコントローラーコードです。たとえば、呼び出しでのを変更したいだけだとしましょう。RessamRessamIdRessamTablo

    [HttpPost]
    public ActionResult EditTablo(Tablo tablo, int? RessamId, HttpPostedFileBase image)
    {
        // Here, I successfully get RessamId, no problem there
        if (ModelState.IsValid)
        {

            // this is where I attach the Tablo object
            if (tablo is TuvalBaski)
            {
                container.Urun.Attach((TuvalBaski)tablo);
            }
            else if (tablo is YagliBoya)
            {
                container.Urun.Attach((YagliBoya)tablo);
            }

            // and this is the part where I change the Ressam reference
            if (RessamId == null)
            {
                tablo.Ressam = null;

                container.Ressam.Attach(tablo.Ressam);
                TryUpdateModel(tablo.Ressam);
            }
            else
            {

                tablo.Ressam = (from table in container.Ressam
                                where table.RessamId == RessamId
                                select table).Single();

                //container.Ressam.Context.ObjectStateManager.ChangeObjectState(tablo.Ressam, System.Data.EntityState.Modified);
                //container.ObjectStateManager.ChangeObjectState(tablo.Ressam, System.Data.EntityState.Modified);

                container.Ressam.Attach(tablo.Ressam);
                TryUpdateModel(tablo.Ressam);
            }

        return View(tablo);
    }

ちなみに、これは動作しません。Tabloエンティティ内の参照IDを更新して、別のIDを表示できるようにするにはどうすればよいRessamですか?

4

2 に答える 2

1

tabloインスタンスをコンテキストにアタッチする必要があります。

[HttpPost]
public ActionResult EditTablo(Tablo tablo, int? RessamId, HttpPostedFileBase image)
{ 
    if (ModelState.IsValid)
    {
        container.Tablo.Attach(tablo);
        container.ObjectStateManager
            .ChangeObjectState(tablo, System.Data.EntityState.Modified);

        if (RessamId != null)
        {
            tablo.Ressam = (from table in container.Ressam
                            where table.RessamId == RessamId
                            select table).Single();

            TryUpdateModel(tablo.Ressam);
        }

        container.SaveChanges();
    }

    return View(tablo);
}
于 2012-07-14T02:44:53.447 に答える
0

多くの話をせずに、ここに仕事をするコードがあります:

       [HttpPost]
        public ActionResult EditTablo(Tablo tablo, int? RessamId, HttpPostedFileBase image)
        {
            if (ModelState.IsValid)
            {
                if (tablo is TuvalBaski)
                {
                    container.Urun.Attach((TuvalBaski)tablo);
                }
                else if (tablo is YagliBoya)
                {
                    container.Urun.Attach((YagliBoya)tablo);
                }

                if (RessamId == null)
                {
                    if(tablo.Ressam != null)
                    {
                        container.Ressam.Detach(tablo.Ressam);
                    }

                    tablo.Ressam = null;
                }
                else
                {
                    if (tablo.Ressam != null)
                    {
                        container.Ressam.Detach(tablo.Ressam);
                    }

                    tablo.Ressam = (from table in container.Ressam
                                    where table.RessamId == RessamId
                                    select table).Single();


                    container.Ressam.Attach(tablo.Ressam);
                }

                TryUpdateModel(tablo);
                container.SaveChanges();
            }

            return View(tablo);
        }
于 2012-07-14T12:11:53.393 に答える