0

私はMVCフレームワークが初めてです。MVC 4 ベータ版を使用していますが、問題が発生しています。私はたくさんグーグルで検索しましたが、私の問題の解決策を見つけることができなかったので、誰かがそれを手伝ってくれることを願っています. 私の問題は、2 つのデータベースがあることです

   Database1 db1=new Database1();
   Database2 db2=new Database2();

   tbl1 tb1=new tbl1(); /// from db1
   tbl2 tb2=new tbl2(); // from db2

両方のテーブルには同じプロパティがありますが、db2 にはどのプロパティにも関係が含まれていません。

ここに私のコードがあります

   public bool Save(int id=0){
   tb1 = db1.tbl1.Single(tr => tr.id == id);

   tb2.a=tb1.a;
   tb2.b=tb1.b;
   tb2.c=tb1.c;
   tb2.d=tb1.d;
   tb2.e=tb1.e;

    if (db2.tbl1.SingleOrDefault(tr => tr.rid == id) == null)
            {
                db2.tbl1.AddObject(tb2); /// This works perfectly fine
            }
            else
            {

                db2.tbl1.Attach(tb2); /// This gives me an error Object Reference does not set to an instance of an object 
                db2.ObjectStateManager.ChangeObjectState(tb2, EntityState.Modified);

            }
            db2.SaveChanges();
   }

面白いことに、別のコントローラーで同じ方法を使用しており、魅力的に機能しています。なぜそれが起こっているのか、それを解決する方法についての提案は非常に役に立ちます。

ありがとう

4

1 に答える 1

0

私はよくグーグルで検索し、MSDN で解決策を見つけました。行を削除したばかりの問題を解決した方法は次のとおりです

    db2.tbl1.Attach(tb2);

そして、それは魅力のように機能しました。

ここで何が起こっているのかを少し説明します。DB でレコードが存在するかどうかを検索すると、存在する場合は自動的に DBcontext にアタッチされるため、このように DB の状態を変更するだけです。

    db2.ObjectStateManager.ChangeObjectState(tb2, EntityState.Modified);

記録を保存します。

    db2.SaveChanges();

データベースにレコードが見つからない場合は、新しい dbcontext を db2.AddObject(tb2); として db2 に追加する必要があります。

記録を保存します。

これが誰かに役立つことを願っています。

リヤサット

于 2012-04-20T10:34:23.993 に答える