4

ASP.NET MVC アプリケーション (Entity Framework1.0 を使用した Microsoft .NET Framework バージョン 3.5 SP1) を開発しています。MySQL データベースには約 30 のテーブルがあります。これまでに 10 個のモデル クラスを作成しました。すべてのモデルに dataentity のインスタンスがあります。

サンプル モデル クラス:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MyProj.Models
{
    public class SSDModel
private ddms_dataEntities2 db = new ddms_dataEntities2();

public ssd searchbyId(string id)
        {
            return db.ssd.FirstOrDefault(d => d.ssd_id_text == id);
        }

 public void add(ssd item)
        {
            db.AddTossd(item);
        }
}

SSDModel のオブジェクトをインスタンス化して、別のモデル クラスから searchbyId() メソッドにアクセスしようとすると、例外が発生しました。オブジェクト コンテキストが共有されていませんでした。

モデル クラス間でオブジェクト コンテキストを共有する最善の方法を見つけようとしています。解決策を見つけるために、SOや他のサイトを調べました。最適なアプローチの 1 つは、HttpRequest ごとに 1 つのオブジェクト コンテキストを持つことだと理解しています。ただし、ネットで見つけたものはすべてエンティティ フレームワーク 4.0 に関するものです。アプリケーションを別のバージョンに移行したくありません。

私が参照できる良いドキュメント/ブログ/サンプル アプリケーションを提案してください。これは私の最初の MVC アプリケーションであり、どんな助けも大歓迎です。

ありがとう

4

1 に答える 1

2

SSDModelオブジェクトの作成時に Context をコンストラクタに渡すことができます。

public class SSDModel
       private ddms_dataEntities2 db;

       public SSDModel(ddms_dataEntities2  context){
          db=context;
       }

       public ssd searchbyId(string id)
        {
            return db.ssd.FirstOrDefault(d => d.ssd_id_text == id);
        }

        public void add(ssd item)
        {
            db.AddTossd(item);
        }
}

いくつかのモデル クラスを初期化する場合は、1 つのコンテキストを作成し、それをすべてのコンストラクターに渡します。

var ddms_dataEntities2 db = new ddms_dataEntities2();
SSDModel ssd=new SSDModel(db);
OtherModel other=OtherModel(db);

リクエストごとにコンテキストを保持する簡単な方法の 1 つは、こちら
で説明されて います。または、IOC コンテナーを使用することもできます。

于 2012-11-13T03:51:35.223 に答える