1

ここで本当に単純なものが欠けているように感じます。MVC Miniprofiler をプロジェクトに統合していますが、正しい接続でコンテキストをインスタンス化する方法が見つかりません。これは EF Code First ではなく、モデルが ObjectContext から継承されているためです。私のコードです

public static MyModel GetDataBaseModel()
{       
    DbConnection conn = new MySqlConnection(Utils.GetConnectionString());

    // this returns a DBConnection
    DbConnection profiledConnection = MvcMiniProfiler.Data.ProfiledDbConnection.Get(conn);  

    //my model needs an EntityConnection, so this is not possible
    return new MyModel(profiledConnection); 
}

これを解決する方法は?

4

1 に答える 1

1

MyModelEntity Framework Designer によって作成されたコンテキストだと思いますよね? EntityConnection は、 と組み合わせて DbConnection から作成できますMetadataWorkspace。また、EF デザイナーが app/web.config に次のような接続文字列プロパティを追加したと仮定します。

metadata=res://*/Content.MyModel.csdl|res://*/Content.MyModel.ssdl|res://*/Content.MyModel.msl;

これらは、MetadataWorkspace を構成する 3 つのコンポーネントです。これらの情報から EntityConnection を作成するには、配列内の各ファイルを提供する必要があります。

string[] paths =
{
    // "res://" refers to a embedded resource within your DLL, this is automatically done if
    // you've used the EF designer.
    "res://*/Content.MyModel.csdl",
    "res://*/Content.MyModel.ssdl",
    "res://*/Content.MyModel.msl"
};

Assembly[] assembliesToConsider = new Assembly[]
{
    typeof(MyModel).Assembly
};

System.Data.Metadata.Edm.MetadataWorkspace workspace = new System.Data.Metadata.Edm.MetadataWorkspace(paths, assembliesToConsider);
EntityConnection connection = new EntityConnection(workspace, profiledConnection);

MvcMiniProfiler でこれをテストしていません (最初にインストールしたのは今です) が、プロファイルされた接続が元の MySqlConnection のように正確に動作しない場合は、いくつかの問題がある可能性があります。それ以外の場合は、セットアップを作成しようとします。 .

于 2011-08-11T21:43:46.673 に答える